我已经做 C# 一个月了,所以请原谅这个问题的“本地性”,但我已经研究了几个小时,我已经碰壁了。
我已经看到了使用IIdentity
和IPrincipal
.
我找不到很多信息,但是,关于更多基于权限的授权方法,在这个应用程序中想象没有组,只有权限和用户列表,您可以为任何人分配任何权限。
我希望能够:
1) 能够根据用户权限控制 UI/元素,其状态如下:启用、只读、不可见、折叠(见此处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 Flags 可能是我正在寻找的东西 [Flags] Enum Attribute 在 C# 中是什么意思?
我想我了解枚举/标志/位,但不足以完成实现......
如果我有:
EmployeeModel
EmployeeViewModel
ThingTwoModel
ThingTwoViewModel
MainView
我不确定一切都在哪里以及如何将它们联系在一起......这是我到目前为止所拥有的(我意识到这不是一个可行的例子......那是我的问题!):
[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
}
}
感谢您的任何指导。