我有一个使用CQRS的Todo应用程序,我想检查执行CreateReadUpdate操作的用户的一些权限。
给定:
Office
和 Kitchen
Todo
和 User
属于一个群体规则:
表: Groups
| GroupId | GroupName |
| 1 | Office |
| 2 | Kitchen |
表: Todo
| TodoId | GroupId |
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
桌子。User
|UserId | GroupId |
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
我想知道什么:
请把你的想法告诉我。
谢谢您。
应用(也就是服务),应该协调活动,而域模型应该包含规则。
其中一些可能取决于具体的细节,但你可以做这样的事情......
// Todo Command Service
public ResponseModel CreateTodoItem(CreateTodoItemCommand command, User user) {
var userPermissionCheck = _userTodoCommandPermissions.GetPermissions(user, command.GroupId);
if (!userPermissionCheck.CanCreate) {
return ResponseModel.Failed();
}
// continue
}
我也会在同一个查询端做类似的事情。
就CQRS而言,我不确定是否真的需要摆脱服务层--但也许你的处理程序的设计方式就是为了处理这个问题。所以这有点取决于。