我有一个归因于的课程

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


这可以按预期工作,并且当未验证当前主体时,将拒绝调用方访问。在一种特定的情况下,我希望此逻辑短路...也就是说,不需要对调用方进行身份验证。实现此目的的一种方法通常是将新的Identity的IsAuthenticated属性设置为true来重置线程的CurrentPrincipal。

但是,我认为我应该能够通过调用方Assert来实现:

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


这不会产生预期的效果,但是MyExemptedCallerClass中的方法仍然会引发异常,试图实例化MyProtectedClass

有任何想法吗?还有另一种/更好的方法来完成此任务吗?

谢谢。

最佳答案

这里有一些想法:


将PrincipalPermission属性放在您要保护的方法上,而不是类上。
如果一段代码需要同时由经过身份验证的用户和未经身份验证的用户运行,则它可能不属于MyProtectedClass。也许它属于MyUnprotectedClass,只能在您上面提到的一种特定情况下实例化。经过身份验证的客户端仍可以通过在MyProtectedClass上调用Facade方法来访问MyUnprotectedClass中的代码。

09-11 21:38