假设我有一个复杂的系统,那里有很多人。简单的想法就是员工/经理之间的关系,许多员工向一位经理汇报。现在,除了经理外,还有一些能够代表经理行事的支持人员可以操纵经理的员工。

在CQRS系统中,您如何为“编辑员工”的假设 Action 建模消息,而该 Action 的调用者是支持人员。仅当根据经理安全关系的工作人员在其领域中对员工进行操作时,该操作才能成功。

验证其安全性将涉及查询数据库,以验证正在被修改的人员确实在该经理的员工链中。

该查询将在哪里发生?在发出“编辑员工”消息之前?

如果在发出消息之前先对数据进行了验证,则在最终一致的系统中,假定在处理“编辑雇员”消息之前,发生了单独的操作,该操作将删除用户完成“编辑雇员”操作的权限。如果命令处理程序没有验证该消息的安全性,即使用户不再具有执行该消息的权限,该消息仍将成功。

这似乎意味着与UI验证和服务器端验证类似的双面验证将是最好的方法。但是,完成验证的方法似乎违反了CQRS的关键原则。

使用CQRS时,必须解决这些问题和其他类似的跨领域问题时,哪种方法最好?

最佳答案

我可能会完全跳过此域的CQRS,并让Web层直接与DB层对话(不发送消息)。简单的乐观并发应该处理将要发生的少量冲突。

关于security - CQRS应用了诸如安全之类的跨领域关注点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9010594/

10-13 06:01