我正试图找出使用设计模式或良好的面向对象解决方案来实现和编码以下内容的正确方法:
有一个用户类可以包含一组变量许可证,每个许可证允许他对应用程序执行不同的操作。这个想法是能够告诉某个用户对象,例如删除一个订单,如果他有任何允许他这样做的许可,那么就做,如果没有,则提出异常。
如果某人有一个可以阅读此内容的地方,那也是有帮助的。 感谢
答案 0 :(得分:5)
C#/ .NET中有内置的权限功能。
函数的访问要求是通过PrincipalPermissionAttribute
类设置的,或者是使用PrincipalPermission
设置的。除非当前用户是Administrators
角色的成员,否则为了防止调用方法,将使用以下属性(来自MSDN的示例):
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
static void CheckAdministrator()
{
Console.WriteLine("User is an administrator");
}
这两个检查都是针对调用线程的当前标识。所以你需要做的是实现IPrincipal
接口,以允许将用户设置为线程标识。然后,您可以使用标准.NET PrincipalPermission
来检查安全性。它完全按照您的意愿工作 - 如果不满足安全性要求,则抛出异常。
答案 1 :(得分:0)
如果一个用户可以拥有多个许可证,每个许可证允许执行不同的任务,那么您可能需要查看装饰器模式。
虽然这很大程度上取决于您的要求。