3

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

我已经看到了使用IIdentityIPrincipal.

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

我希望能够:

  1. 能够根据用户权限控制 UI/元素,例如:已启用、只读、不可见、已折叠(如此处https://uiauth.codeplex.com/所示)
  2. 能够在类或方法级别指定需要哪些权限(类似于http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based -检查/

代替:

[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;
}

我想我了解枚举/标志/位,但不足以完成实现......

如果我有:

员工
模型员工视图模型

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

    [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
        }
    }
4

1 回答 1

1

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

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

然后你可以看到一个用户是否在那个角色中,他是否可以做某个动作。

我知道这对您的问题没有您可能想要的直接帮助,但我强烈建议您使用类似的解决方案。

于 2013-09-27T19:40:23.447 回答