使用PrincipalPermission和SecurityAction.Assert在.NET中进行基于角色的授权

时间:2010-08-01 22:55:11

标签: c# .net permissions assert

我有一个归属于

的课程
[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
 public class MyProtectedClass { }

这可以按预期工作,并且在未对当前主体进行身份验证时拒绝访问者。在一个特定的场景中,我希望这个逻辑短路......也就是说,调用者不需要进行身份验证。实现这一目标的一种方法可能是使用Identity的IsAuthenticated属性为true的新方法重置Thread的CurrentPrincipal ......

但是,我认为我应该能够通过让来电者Assert

来实现这一目标
[PrincipalPermission(SecurityAction.Assert, Authenticated = true)]
 public class MyExemptedCallerClass { }

但这并没有产生预期的效果,MyExemptedCallerClass中的方法在尝试实例化MyProtectedClass时仍会引发异常。

有什么想法吗?有没有其他/更好的方法来实现这一目标?

感谢。

1 个答案:

答案 0 :(得分:1)

以下是一些想法:

  1. 将PrincipalPermission属性放在您要保护的方法上,而不是类。
  2. 如果一段代码需要由经过身份验证和未经身份验证的用户运行,那么它可能不属于MyProtectedClass。它可能属于MyUnprotectedClass,它只能在您上面提到的一个特定场景中实例化。经过身份验证的客户端仍然可以通过在MyProtectedClass上调用facade方法来访问MyUnprotectedClass中的代码。