【发布时间】:2011-12-04 18:44:50
【问题描述】:
我正在尝试找出使用设计模式或良好的面向对象的解决方案来实现和编码以下内容的正确方法:
有一个用户类可以包含一组可变的许可,每个许可都使他能够对应用程序执行不同的操作。这个想法是能够告诉某个用户对象,例如删除一个订单,如果他有任何允许他这样做的许可,就这样做,如果没有,则引发异常。
如果有人有地方可以阅读此内容,那也很有帮助。 谢谢
【问题讨论】:
标签: c# design-patterns
我正在尝试找出使用设计模式或良好的面向对象的解决方案来实现和编码以下内容的正确方法:
有一个用户类可以包含一组可变的许可,每个许可都使他能够对应用程序执行不同的操作。这个想法是能够告诉某个用户对象,例如删除一个订单,如果他有任何允许他这样做的许可,就这样做,如果没有,则引发异常。
如果有人有地方可以阅读此内容,那也很有帮助。 谢谢
【问题讨论】:
标签: c# design-patterns
在 C#/.NET 中有内置的权限函数。
函数的访问要求是通过PrincipalPermissionAttribute 类设置的,或者在代码内部使用PrincipalPermission 设置。为了防止调用方法,除非当前用户是Administrators 角色的成员,使用以下属性(来自MSDN 的示例):
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
static void CheckAdministrator()
{
Console.WriteLine("User is an administrator");
}
这两项检查都针对调用线程的当前身份。所以你需要做的是实现IPrincipal接口,让你的用户被设置为线程标识。然后您可以使用标准 .NET PrincipalPermission 来检查安全性。它完全按照您的意愿工作 - 如果不满足安全要求,则会引发异常。
【讨论】:
如果一个用户可以拥有多个许可,每个许可允许不同的执行任务,那么您可能想看看 decorator 模式。
虽然这在很大程度上取决于您的要求。
【讨论】: