c# – 如何将身份验证,角色和安全性编入DDD?

c# – 如何将身份验证,角色和安全性编入DDD?,第1张

概述在C#域驱动设计项目中如何实现角色安全性?我们有一些争论,是否应该由调用应用程序(ASP.NET MVC)或域模型本身(模型实体和服务)来实现.有人认为它应该在网站本身,因为这是认证已经存在的地方.但这意味着您必须在每次与核心业务系统集成时重新实施安全性. 例如:管理员应该能够在系统中做任何动作,例如编辑和删除记录(即他们可以删除用户的订单).另一方面,用户应该只能编辑和删除自己的记录(即他们可 在C#域驱动设计项目中如何实现角色和安全性?我们有一些争论,是否应该由调用应用程序(ASP.NET MVC)或域模型本身(模型实体和服务)来实现.有人认为它应该在网站本身,因为这是认证已经存在的地方.但这意味着您必须在每次与核心业务系统集成时重新实施安全性.

例如:管理员应该能够在系统中做任何动作,例如编辑和删除记录(即他们可以删除用户的订单).另一方面,用户应该只能编辑和删除自己的记录(即他们可以从他们的购物车中添加/删除项目).

顺便说一句,这是一个很好的论文,涵盖了有关DDD&安全:

Security in Domain-Driven Design

>第4章安全服务设计方案

> 4.1场景1:安全服务作为常规服务
> 4.2场景2:UI中嵌入的安全性
> 4.3场景3:封装域模型的安全服务
> 4.4情景4:安全服务作为UI的网关
> 4.5场景5:安全服务作为UI的适配器
> 4.6情景6:由AOP与适配器集成的安全服务
> 4.7情景7:与AOP集成的安全服务

我会使用postsharp个人倾向于AOP,但以前没有做过很多,我犹豫要跳过.

解决方法 不要忘记,运行时已经有一个内置的抽象的安全/用户系统 – 主体(请参阅这个 existing answer – 请注意,GenericIDentity只是一个选项;编写自己的程序很简单).

您的UI可以根据具体实现来处理创建和分配主体(实际上,IIRC ASP.NET和WCF自动执行,或者对于winforms / wpf,您可以使用windows标识,或(通过Web服务)相同的ASP .NET登录).

你的业务逻辑只是检查Thread.CurrentPrincipal;从中可以获得名称,身份验证方法和角色检查(无需知道角色如何实现).

运行时还提供内置检查:

[PrincipalPermission(SecurityAction.Demand,Role = Roles.admin)]    public voID Foo() {...}

(其中Roles.admin是您的角色名称的字符串常量)这将自动检查访问,如果不在角色中则抛出SecurityException.您还可以通过代码检查(如果角色在编译时不固定)是有用的.

显然,您的UI应该检查角色(禁用/隐藏功能),但是让业务代码强制执行角色,而无需了解UI.

(添加)

我应该提到GenericIDentity方便单元测试.当然,你可以扮演自己的安全API,没有人会阻止你…

总结

以上是内存溢出为你收集整理的c# – 如何将身份验证,角色和安全性编入DDD?全部内容,希望文章能够帮你解决c# – 如何将身份验证,角色和安全性编入DDD?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1261371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存