【发布时间】:2012-02-19 02:27:17
【问题描述】:
假设我有一个复杂的系统,其中有大量的人。简单的想法是员工/经理的关系,许多员工向一位经理汇报。现在除了经理之外,还有能够代表经理行事的支持人员可以操纵经理的员工。
在 CQRS 系统中,您将如何为假设的“编辑员工”操作的消息建模,其中该操作的调用者是支持人员。仅当根据经理安全关系的员工对其领域内的员工执行操作时,该操作才能成功。
验证其安全性将涉及查询数据库以验证被修改的人确实在该经理的员工链中。
这个查询会出现在哪里?在发出“编辑员工”消息之前?
如果在生成消息之前对数据进行了预先验证,那么在最终一致的系统中,假设在处理“编辑员工”消息之前发生了一个单独的操作,该操作将删除用户完成“编辑”的权限员工”的行动。如果命令处理程序没有验证该消息的安全问题,即使用户不再有权执行该消息,该消息仍然会成功。
这似乎意味着双面验证,类似于 UI 验证和服务器端验证将是最好的做法。然而,完成该验证的方法似乎违反了 CQRS 的关键原则。
在使用 CQRS 时必须处理这些和其他类似的横切问题时,哪种方法最好?
【问题讨论】:
-
IMO 没有一般的答案......我总是会在命令处理程序方面验证 至少 和 可选 “预先”(这可能是在接受消息进入队列的部分)
-
我还认为区分真正的横切关注点(如身份验证、简单授权(是否允许此用户执行此类操作))与管理是否允许某事的业务规则很重要对于特定实体。
标签: security messaging cqrs domain-model cross-cutting-concerns