我阅读了有关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
但是我们应该在哪里执行该规则,以及应该如何执行呢?
猜你喜欢: