2010-08-01 156 views
2

.NET我有一个类归因与基于角色的授权与和的PrincipalPermission SecurityAction.Assert

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

可正常工作和来电者被拒绝访问,当目前的主要未通过身份验证。在一个特定的情况下,我想让这个逻辑短路......也就是说,调用者不需要被认证。完成这将certianly是线程的CurrentPrincipal一个新的身份的IsAuthenticated属性为true复位的方法之一...

不过,我想我应该能够做到这一点具有来电Assert

[PrincipalPermission(SecurityAction.Assert, Authenticated = true)] 
public class MyExemptedCallerClass { } 

这并不会产生所需的效果,但MyExemptedCallerClass中的方法仍尝试实例化MyProtectedClass时会引发异常。

任何想法?是否有另一种/更好的方法来实现这一点?

谢谢。

回答

1

这里有一对夫妇的想法:

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