1

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

  1. 在应用程序实体上定义自定义应用程序操作。对“会议”实体说“更新”操作。
  2. 授予用户“User1”仅对 ID = 1 的实体“会议”执行“更新”操作。
  3. 执行“更新”操作时,检查当前用户(“User1”)是否有权访问 ID = 1 的“会议”实体。

所以我需要一些现有的解决方案来授权特定的对象进行操作。据我所知,一些解决方案(AzMan)提供授权能力,但仅适用于作为单元的操作(不适用于具体对象)。

4

1 回答 1

0

您可以使用PrincipalPermissionsAttribute. 如果您正在处理 Windows 授权和 AzMan 之类的事情,您可以简单地创建用户并为其分配角色并将他们登录到您的应用程序(或使用当前登录的用户信息)。如果您想使用自定义身份验证,您必须自己处理角色并Thread.CurrentPrincipal使用类似GenericPincipal. 然后,您可以使用PrincipalPermissionsAttributeon 方法来确保只有具有特定角色的主体并执行该方法。例如:

[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当没有该角色的用户调用该方法时,您将不得不处理。假设是其他东西检查角色并且根本不执行该方法......

于 2012-09-10T17:51:10.037 回答