例如:管理员应该能够在系统中做任何动作,例如编辑和删除记录(即他们可以删除用户的订单).另一方面,用户应该只能编辑和删除自己的记录(即他们可以从他们的购物车中添加/删除项目).
顺便说一句,这是一个很好的论文,涵盖了有关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,但以前没有做过很多,我犹豫要跳过.
解决方法
您的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,没有人会阻止你…
原文地址:https://www.jb51.cc/csharp/93326.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。