代码之家  ›  专栏  ›  技术社区  ›  Jeff

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

  •  2
  • Jeff  · 技术社区  · 14 年前

    我有一个班级

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

    这按预期工作,当当前主体未通过身份验证时,调用方被拒绝访问。在一个特定的场景中,我希望这个逻辑短路…也就是说,调用方不需要经过身份验证。实现这一点的一种方法是用一个新的线程的当前主体重置线程的当前主体,该线程的标识的IsAuthenticated属性为true。。。

    不过,我想我应该可以通过让打电话的人 Assert :

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

    但是,这并没有产生预期的效果,并且 MyExemptedCallerClass 仍引发尝试实例化的异常 MyProtectedClass .

    有什么想法吗?有没有其他更好的方法来完成这个任务?

    谢谢。

    1 回复  |  直到 10 年前
        1
  •  1
  •   aridlehoover    14 年前

    以下是一些想法:

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