PrincipalPermissionAttribute
由于您提到的原因,我从事的许多应用程序都不会使用它;该属性应用了只能通过代码更改来更改的策略。
另一种方法是直接使用PrincipalPermission
该类。所有安全属性在运行时解析为类似命名的类和方法调用。对于您的属性,将执行以下代码:
PrincipalPermission permission = new PrincipalPermission(null, "Supervisor");
permission.Demand(); // Throws SecurityException if user is not in the role.
如果您直接使用权限类,您可以更好地控制权限的形成方式。您可以有一个数据库,您可以查询该数据库以获取角色列表并像这样对它们执行需求:
private void someMethod()
{
IEnumerable<string> roles = GetRolesForMethod("someMethod");
PrincipalPermission permission = null;
foreach(string role in roles)
{
if(permission == null)
{
permission = new PrincipalPermission(null, role);
}
else
{
permission = permission.Union(
new PrincipalPermission(null, role);
);
}
}
if(permission != null)
{
permission.Demand();
}
}