.net net中的高级授权策略

.net net中的高级授权策略,.net,authorization,.net,Authorization,我正在寻找现有的高级授权解决方案,而不是.net中的身份验证。要求如下: 在应用程序实体上定义自定义应用程序操作。表示会议实体的操作更新。 授予用户User1仅在ID为1的实体会议上执行操作更新。 执行操作更新时,检查当前用户User1是否有权访问ID为1的会议实体。 因此,我需要一些现有的解决方案来授权特定对象进行操作。据我所知,AzMan的一些解决方案提供了授权功能,但仅用于作为单元的操作,而不用于具体对象。您可以使用PrincipalPermissionAttribute之类的东西来实现这

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

在应用程序实体上定义自定义应用程序操作。表示会议实体的操作更新。 授予用户User1仅在ID为1的实体会议上执行操作更新。 执行操作更新时,检查当前用户User1是否有权访问ID为1的会议实体。
因此,我需要一些现有的解决方案来授权特定对象进行操作。据我所知,AzMan的一些解决方案提供了授权功能,但仅用于作为单元的操作,而不用于具体对象。

您可以使用PrincipalPermissionAttribute之类的东西来实现这一点。如果您正在处理Windows授权和AzMan之类的事情,您可以简单地创建用户,为他们分配角色并将他们登录到您的应用程序中,或者使用当前登录的用户信息。如果要使用自定义身份验证,您必须自己处理角色,并使用类似GenericPincipal的内容设置Thread.CurrentPrincipal。然后,您可以对方法使用PrincipalPermissionAttribute,以确保只有具有特定角色的主体才能执行该方法。例如:

[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。假设有其他东西检查角色,但不执行该方法…

您的意思是要基于特定用户授权特定类的实例吗?我是指特定实体。会议实体描述真实事件。我在数据库中有一个事件的记录,在程序中代表它的类。谢谢回答。事实上,我看起来有点不同的解决方案。我想授权类的特定实例,该实例代表真正的唯一实体,比如meeting,而不是静态类。本质上并没有什么可以做的。对象本身必须根据CurrentPrincipals角色执行检查。这可以通过Decorator模式和Strategy模式来实现,以使其与实体分离。或者,您可以使用AOP拦截对实体的调用,并在将其传递给对象之前用安全检查替换它们;但是AOP在.NET中通常很棘手。