如果用要求特定安全权限的属性修饰代码,代码将获得什么好处?

最佳答案

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

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

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

2017年更新:

上面的答案已经完全过时了。几年前,我停止使用此特定属性,因为它使用CLR内置代码编织技术,这使得在您不希望专门测试代码的安全性的情况下,很难进行单元和集成测试。

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

10-06 05:14
查看更多