Я читал о DDD и контроле доступа, и я нашел некоторое противоречие между двумя следующими мнениями:
- "проблемы безопасности должны выполняться за пределами домена"
- "требования к управлению доступом являются специфичными для домена"
Я ищу наилучшую практику. Итак, где я должен поместить логику управления доступом с помощью управляемого доменом конструкции и как ее реализовать?
(Чтобы быть более точным с помощью DDD + CQRS + ES.)
Я думаю, что это должно быть где-то рядом с бизнес-логикой, например, пользовательская история может быть примерно такой:
Пользователь может редактировать свой профиль, отправив имя пользователя, список хобби, cv и т.д.
На основе истории пользователей мы реализуем модель домена и сервисы, например:
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)
Это нормально, но где HIS profile
часть истории?
Это, очевидно, управление доступом на основе атрибутов, потому что мы должны написать правило примерно так:
deny all, but if subject.id = resource.owner.id then grant access
Но где мы должны применять это правило и как его реализовать?