DDD中有域安全吗?

时间:2012-02-23 12:57:00

标签: domain-driven-design

我阅读了以下问题的答案:Domain Driven Design and Security但我对答案不满意。

访问方法或命令很简单,你可能只是限制角色或类似的东西。一个简化示例,其中该命令对于角色A或B中的用户(如果x < 100有效),但仅对{B} x >= 100的用户B有效,其中x是命令中的参数。该检查应该去哪里?应用程序应该在执行命令之前检查参数,还是域应该知道角色等?

我能说清楚吗?

1 个答案:

答案 0 :(得分:3)

这是命令的关注吗?我的意思是安全检查是否适合域内?当一个命令在整个有界上下文中具有相同的意图时,我认为相应的聚合根应确保其在特定上下文中的有效性。

您提到的场景听起来像是业务规则而不是简单的权限检查。所以我将检查放在域级别作为AR的一部分。

如果用户可以执行命令,我也会检查基础架构层,但这样可以优雅地处理拒绝。像这样的东西

var ar=repository.Get(id);
if (ar.CanAddMoney(User,amount)) ar.AddMoney(amount,User)
else handleForbiddenAction();

当然,对于模糊的问题,这是一个非常模糊的解决方案。它在很大程度上取决于域的复杂性,我想唯一有效的答案是:'它取决于'。

事实上,直接向标题转发,DDD中的安全性表示为有效模型。