如果使用要求特定安全权限的属性来装饰代码,您的代码会获得哪些好处?

Ash*_*noi 8 .net

如果使用要求特定安全权限的属性来装饰代码,您的代码会获得哪些好处?

Ste*_*ven 12

在构建旨在以部分信任方式运行的可重用库时,大多数安全权限特别有用.这样,当调用程序集或AppDomain没有配置适当的权限时,您可以限制对某些功能的访问.对于完全信任的应用程序,大多数安全权限都没有用.

但是,有一个属性我倾向于使用很多,那就是PrincipalPermissionAttribute.当您使用此属性修饰类或函数时,.NET将检查每个访问权限当前线程的原则是否具有适当的权限.换句话说,您可以根据用户的角色(基于角色的安全性)允许或拒绝访问该代码.这是一个例子:

[PrincipalPermission(SecurityAction.Demand, Role = "Managers")]
public static void ShowSalaryForEmployee(Employee employee)
{
    // code here.
}
Run Code Online (Sandbox Code Playgroud)

2017年更新:

上面的答案已经过时了.我在几年前停止使用这个特定的属性,因为它使用了CLR内置的代码编织技术,这使得单元和集成测试很难进行,因为你对专门测试代码的安全性方面不感兴趣.

相反,我发现定义我自己的属性更好,这些属性声明了对operstions(通常由消息定义)的权限,并在基础结构级别(通常使用装饰器)实现授权,而不是依赖于代码编织.