Controle de acesso em design orientado a domínio
Li sobre DDD e controle de acesso e encontrei alguma contradição entre as duas opiniões a seguir:
"preocupações de segurança devem ser tratadas fora do domínio""os requisitos de controle de acesso são específicos do domínio"Estou procurando uma prática recomendada sobre isso. Então, onde devo colocar a lógica de controle de acesso por design orientado a domínio e como implementá-la?
(Para ser mais específico por DDD + CQRS + ES.)
Eu acho que deve estar em algum lugar perto da lógica de negócios, por exemplo, uma história de usuário pode ser algo como isto:
O usuário pode editar seu perfil enviando um nome de usuário, uma lista de hobbies, CV, etc ...
Com base na história do usuário, implementamos o modelo de domínio e os serviços, por exemplo:
UserService
editProfile(EditUserProfileCommand command)
User user = userRepository.getOneById(command.id)
user.changeName(command.name)
user.changeHobbies(command.hobbies)
user.changeCV(command.cv)
UserRepository
User getOneById(id)
User
changeName(String name)
changeHobbies(String[] hobbies)
changeCV(String cv)
Tudo bem, mas onde está oHIS profile
parte da história?
Obviamente, isso é controle de acesso baseado em atributos, porque devemos escrever uma regra mais ou menos assim:
deny all, but if subject.id = resource.owner.id then grant access
Mas onde devemos aplicar essa regra e como devemos implementá-la?