.net中的高级授权策略

时间:2012-09-10 15:39:46

标签: .net authorization

我正在寻找.net中的高级授权(不是身份验证)的现有解决方案。要求如下:

  1. 在应用程序实体上定义自定义应用程序操作说“会议”实体的操作“更新”。
  2. 授予用户“User1”仅对ID = 1的实体“会议”执行“更新”操作。
  3. 执行“更新”操作时,检查当前用户(“User1”)是否有权访问ID为1的“会议”实体。
  4. 所以我需要一些现有的解决方案来授权特定对象进行操作。据我所知,一些解决方案(AzMan)提供授权功能,但仅适用于作为单位的操作(不适用于具体对象)。

1 个答案:

答案 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。假设是其他东西检查角色并且根本不执行该方法...