最佳答案
我读过 DDD 和访问控制,我发现以下两种观点之间有些矛盾:
我正在寻找这方面的最佳实践。因此,我应该把领域驱动设计的访问控制逻辑放在哪里,我应该如何实现它?
(通过 DDD + CQRS + ES 更具体一些。)
我认为它应该接近业务逻辑,例如一个用户故事可以是这样的:
用户可以通过发送用户名、业余爱好列表、简历等来编辑个人资料。
基于用户故事,我们实现域模型和服务,例如:
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
但是我们应该在哪里执行这个规则,我们应该如何执行它?