我正在我的 .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 继承,因为它是密封的,所以我不能。:(
还有其他方法可以解决这个问题吗?也许我不需要继承,但我可以以某种方式注册自己的属性类型,以便它在所有相同的地方工作吗?