gpt4 book ai didi

c# - DDD 用户安全策略

转载 作者:太空狗 更新时间:2023-10-29 19:57:56 25 4
gpt4 key购买 nike

我有一个 RentalProperty 类,看起来像这样:

class RentalProperty
{
Money MonthlyRent;
List<MaintainenceCall> MaintainenceCalls;
}

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

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

最佳答案

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

DDD 剧本引入了规范 的概念,正是为了将光线聚焦在模型本身上。您首先像上面描述的那样设置您的 getter 和 setter 以获得功能。然后,在重构期间,通过将长的 getter/setter 代码抽象到规范类中来寻求使模型更清晰。

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 页左右。

关于c# - DDD 用户安全策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/627945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com