我正在寻找.net中的高级授权(不是身份验证)的现有解决方案。要求如下:
所以我需要一些现有的解决方案来授权特定对象进行操作。据我所知,一些解决方案(AzMan)提供授权功能,但仅适用于作为单位的操作(不适用于具体对象)。
答案 0 :(得分:0)
您可以使用PrincipalPermissionsAttribute
之类的内容执行此操作。如果您正在处理Windows授权和AzMan之类的事情,您只需创建用户为其分配角色并将其记录到您的应用程序中(或使用当前登录的用户信息)。如果您想使用自定义身份验证,则必须自己处理角色,并使用Thread.CurrentPrincipal
之类的内容设置GenericPincipal
。然后,您可以在方法上使用PrincipalPermissionsAttribute
来确保只有具有特定角色的主体并执行该方法。例如:
[PrincipalPermission(SecurityAction.Demand, Role = @"UserUpdater")]
public void UpdateUserName(string name)
{
//...
}
如果您想自己进行授权,一旦授权用户,您可以使用以下内容设置主体:
var identity = new GenericIdentity("Bill");
var roles = new[] { @"UserUpdater" };
var principal = new GenericPrincipal(identity, roles);
Thread.CurrentPrincipal = principal;
当没有该角色的用户调用该方法时,您必须处理SecurityException
。假设是其他东西检查角色并且根本不执行该方法...