“它们(属性)在编译时被烘焙到程序集中,这对如何设置它们的属性有非常严重的影响。仅接受常数(在编译时已知)。”
...所以我不确定这是否可能:
我想在代码中用属性装饰几种方法,这些属性可以检查当前用户的角色,并且仅在角色达到要求的最小值时才允许执行。
到目前为止,我的属性如下:
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public class PermissionCheckAttribute : Attribute
{
public PermissionsEnum MinRole { get; set; }
}
我打算这样使用它:
[PermissionCheck(MinRole=PermissionsEnum.Manager)]
public string Foo()
{
return "OK"
}
角色看起来像这样:
public enum PermissionsEnum
{
Employee: 5
Manager: 20
Director: 50
}
我的代码中有一种方法始终可以让我检查当前用户和角色:
var userRole = GetCurrentUser().Role // returns Employee[5]
我的问题是 在 ,我是否将代码比较了userRole
和传递到属性中的MinRole
?
理想情况下,如果未达到return "OK"
,MinRole
不会发生...但是我是否必须在角色比较代码中throw
?如何使用属性有条件地处理两个不同的代码路径?