基于WPF权限的授权

本文关键字:授权 权限 WPF 基于 | 更新日期: 2023-09-27 18:28:42

我已经做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/)

代替:

[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,但不足以完成实现。。。

如果我有:

员工模型
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
        }
    }

基于WPF权限的授权

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

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

然后,你可以看看用户是否担任该角色,以及他是否可以执行某个操作。

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