我正在我的.NET 4.5应用程序中实现基于声明的安全。虽然有很多要注意的地方,但它基本上可以工作。
我不喜欢的是我不能创建自己的属性。ClaimsPrincipalPermissionAttribute是密封的。为什么?
我一直在整个应用程序中进行标记,例如:
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "Foo", Operation = "Bar")]
为了避免我的资源和操作字符串被拼写错误并且易于重构,我创建了类以便进行这些操作:
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = Resources.Foo, Operation = Operations.Foo.Bar)]
(请注意,由于不同的资源可能具有不同的操作,因此操作本身会被资源子类化。)
这一切都很好,但是每次打字或复制/粘贴都很麻烦。我更愿意做像这样的事情:
[DemandPermission(Resources.Foo, Operations.Foo.Bar)]
我可以创建这个属性,但是我需要继承自ClaimsPrincipalPermissionAttribute,但我不能因为它被密封了。 :(
有其他方法来解决这个问题吗?也许我不需要继承,但我能注册自己的属性类型以使其在所有相同的地方起作用吗?
ClaimsPrincipalPermissionAttribute
一样被框架捕捉到吗?我想这取决于它是否专门寻找这个,还是寻找任何派生自CodeAccessSecurityAttribute
的成员。我需要进行实验并观察! - Matt Johnson-Pint