WPF基于权限的授权

时间:2013-08-22 13:51:23

标签: c# wpf authorization

我现在已经做了一个月的C#所以请原谅这个问题的“本地化”但是我已经研究了几个小时而且我已经碰壁了。

我已经看到了使用IIdentityIPrincipal的WPF应用程序的基于角色的授权的左右示例。

我找不到很多信息,但是,更多基于权限的授权方法,在这个应用程序中,想象没有组,只有权限和用户列表,你可以任何人都可以给予任何许可。

我希望能够:

  1. 能够根据用户权限控制UI /元素,其状态包括:Enabled,ReadOnly,Invisible,Collapsed(如此处https://uiauth.codeplex.com/所示)
  2. 能够在类或方法级别指定需要哪些权限(类似于http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/
  3. 而不是:

    [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
    

    我想要类似的东西:

    [PrincipalPermission(SecurityAction.Demand, Permission = "Can add users")]
    

    现在,我看到如何执行此操作的唯一方法是利用ICommand并使用大量字符串比较在CanExecute方法中放置授权逻辑,以查看用户是否具有执行所需的权限请求的行动如下:

    // Employee class
    public bool HasRight(SecurityRight right)
    {
        return employee.Permissions.Contains(right);
    }
    
    // Implementation, check if employee has right to continue
    if (employee.HasRight(db.SecurityRights.Single(sr => sr.Description == "Can edit users")))
    {
        // Allowed to perform action
    }
    else
    {
        // User does not have right to continue
        throw SecurityException;
    }
    

    我认为我理解enum / flag / bits但不足以完成实现......

    如果我有:

    EmployeeModel
    EmployeeViewModel

    我不知道一切都在哪里以及如何将它们联系在一起....这就是我到目前为止所拥有的:

        [Flags]
        public enum Permissions
        {
            None = 0,
            Create = 1 << 0,
            Read = 1 << 1,
            Update = 1 << 2,
            Delete = 1 << 3,
    
            User = 1 << 4,
            Group = 1 << 5
        }
    
        public static void testFlag()
        {
            Permissions p;
            var x = p.HasFlag(Permissions.Update) && p.HasFlag(Permissions.User);
            var desiredPermissions = Permissions.User | Permissions.Read | Permissions.Create;
            if (x & p == desiredPermissions)
            {
                //the user can be created and read by this operator
            }
        }
    

1 个答案:

答案 0 :(得分:0)

您可能会看到许多基于角色的解决方案的原因是因为从长远来看,这是一个更易于维护的解决方案。

您可以为应用程序的功能集设置一些具有不同授权级别的模板(角色),而不是为个人提供权限并且必须在组织中管理每个人。

然后你可以看看用户是否担任该角色是否可以采取某种行动。

我知道它并不像你想要的那样直接帮助你,但我强烈建议你使用类似的解决方案。