Если у меня есть сущность Entity и служба EntityService и EntityServiceFacade со следующими интерфейсами:
interface EntityService {
Entity getEntity(Long id);
}
interface EntityServiceFacade {
EntityDTO getEntity(Long id);
}
Я могу легко защитить доступ для чтения к объекту, контролируя доступ к методу getEntity на уровне обслуживания,Но как только у фасада есть ссылка на сущность, как я могу контролировать доступ на запись к нему?Если у меня есть метод saveEntity и контроль доступа на уровне сервиса (не фасада), как это (с аннотациями безопасности Spring здесь):
class EntityServiceImpl implements EntityService {
...
@PreAuthorize("hasPermission(#entity, 'write')")
public void saveEntity(Entity entity) {
repository.store(entity);
}
}
class EntityServiceFacadeImpl implements EntityServiceFacade {
...
@Transactional
public void saveEntity(EntityDTO dto) {
Entity entity = service.getEntity(dto.id);
entity.setName(dto.name);
service.save(entity);
}
}
Проблема здесь в том, что проверка контроля доступа происходит уже после того, как яизменил название сущности, так что этого недостаточно.
Как вы, ребята, делаете это?Вместо этого вы защищаете методы объекта домена?
Спасибо
Редактировать:
Если вы защищаете свои объекты домена, например, с помощью аннотаций, таких как:
@PreAuthorize("hasPermission(this, 'write')")
public void setName(String name) { this.name = name; }
Разбиваю ли я тогда модель предметной области (согласно DDD?)
Edit2
Я нашел тезис на предмет.В заключении этого тезиса говорится, что хорошим способом является аннотирование методов объекта домена для их защиты.Есть мысли по этому поводу?