【问题标题】:design pattern to implement a set of permissions for a user为用户实现一组权限的设计模式
【发布时间】:2011-12-04 18:44:50
【问题描述】:

我正在尝试找出使用设计模式或良好的面向对象的解决方案来实现和编码以下内容的正确方法:

有一个用户类可以包含一组可变的许可,每个许可都使他能够对应用程序执行不同的操作。这个想法是能够告诉某个用户对象,例如删除一个订单,如果他有任何允许他这样做的许可,就这样做,如果没有,则引发异常。

如果有人有地方可以阅读此内容,那也很有帮助。 谢谢

【问题讨论】:

    标签: c# design-patterns


    【解决方案1】:

    在 C#/.NET 中有内置的权限函数。

    函数的访问要求是通过PrincipalPermissionAttribute 类设置的,或者在代码内部使用PrincipalPermission 设置。为了防止调用方法,除非当前用户是Administrators 角色的成员,使用以下属性(来自MSDN 的示例):

    [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
    static void CheckAdministrator()
    {
        Console.WriteLine("User is an administrator");
    }
    

    这两项检查都针对调用线程的当前身份。所以你需要做的是实现IPrincipal接口,让你的用户被设置为线程标识。然后您可以使用标准 .NET PrincipalPermission 来检查安全性。它完全按照您的意愿工作 - 如果不满足安全要求,则会引发异常。

    【讨论】:

    • 我也更喜欢这种以原则为中心的方法,我建议您更进一步,创建声明性和/或命令性权限对象来封装 PrinciplePermission 断言。这将防止原理细节泄漏到代码库的其余部分。请记住,您不必购买更大的 CAS 基础架构即可使用此模式。不过需要注意的是,WCF 安全模型非常不同,因此请忽略您要去的地方。这是该模式的示例。 smelser.net/blog/post/2009/03/09/…
    • @JoeGeeky 这似乎是我正在寻找的,但我如何设置用户的许可?还有,这些用户和用户组跟windows UAC用户/用户组没有关系?
    【解决方案2】:

    如果一个用户可以拥有多个许可,每个许可允许不同的执行任务,那么您可能想看看 decorator 模式。

    虽然这在很大程度上取决于您的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 2014-08-13
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多