首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD用户安全策略

DDD用户安全策略
EN

Stack Overflow用户
提问于 2009-03-09 20:40:37
回答 2查看 3.9K关注 0票数 7

我有一个RentalProperty类,如下所示:

代码语言:javascript
复制
class RentalProperty
{
    Money MonthlyRent;
    List<MaintainenceCall> MaintainenceCalls;
}

根据我的理解,使用DDD更改MonthlyRent时,我将获得RentalProperty,更改MonthlyRent属性,然后调用RentalPropertyRepository.Save()。添加新的MaintainenceCall也需要处理相同的过程。

我的问题是,例如,杂工应该能够添加MaintainenceCall,但不应该被允许更改MonthlyRent。我应该如何实现这个(以及其他类似的)安全策略?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-09 20:58:06

AOP。对于这样的东西,PostSharp真的很灵巧。

因为安全确实是一个跨领域的问题。

票数 4
EN

Stack Overflow用户

发布于 2009-03-20 03:40:05

简而言之,您应该在模型中直接应用此业务规则。在您的例子中,直接在MonthlyRent的getter和setter属性中。我们都知道,通过大量的检查和安全级别,这可能会变得多么复杂;所以,这就是规范的目的。

DDD攻略引入了Specifications,的概念,正是出于这个目的,将重点放在了模型本身上。首先像上面描述的那样设置getter和setter来获得功能。然后,在重构过程中,通过将长的getter/setter代码抽象为Specification类来使模型变得更干净。

代码语言:javascript
复制
Employee employee = 
    employeeRepository.findEmployee(employeeID);

Specification employeeCanModifyRent = new
    Specification(
        new EmployeeHasAccessToManagement()
        , new EmployeeHasAccessToMoney());

if(employeeCanModifyRent.isSatisfiedBy(employee))
{
  rentService.changeRent();
}
else
{
  throw new exception("Access denied.");
}

阅读代码可以很清楚地知道代码到底做了什么。这本身就是DDD的核心概念。规范应该保持非常简单,直截了当。

这段代码来自Domain-Driven Design Quickly,这是一个简短而快速的DDD快速读取器。这确实是一本关于DDD的简短的书,值得在几个小时内阅读。只有100页左右。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/627945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档