C# 在属性和方法之间共享角色属性的初始化

C# 在属性和方法之间共享角色属性的初始化,c#,arrays,attributes,C#,Arrays,Attributes,我有一个permissions属性,该属性获取角色的枚举值列表: [CheckRoles(SystemRole.ID.Admin, SystemRole.ID.User)] public class MyController : Controller { .... } 但是,在代码的其他部分,我想检查用户是否处于这些角色中的任何一个,这样我就可以转到正确的页面。所以代码看起来像: if (roles.IsInAnyRoles(user,

我有一个permissions属性,该属性获取角色的枚举值列表:

    [CheckRoles(SystemRole.ID.Admin, SystemRole.ID.User)]
    public class MyController : Controller
    {
            ....
    }
但是,在代码的其他部分,我想检查用户是否处于这些角色中的任何一个,这样我就可以转到正确的页面。所以代码看起来像:

if (roles.IsInAnyRoles(user, SystemRole.ID.Admin, SystemRole.ID.User)
{
    ... Do something in MyController ...
}
你可以在这里看到重复。我真的希望在变量或初始化器列表中有这两个角色,我可以将它们传递给属性和方法。创建常量数组不起作用。有没有办法做到这一点?我可以以某种方式存储数组初始化器吗

任何帮助都将不胜感激

更新

我已将角色enum int设置为标志enum(并为项目提供适当的值)。这意味着我可以将这些值合并起来,得到一个单一的常量值。 我现在可以在属性和方法中使用该常量值。
感谢下面的Danny Chen。

在我的实际项目经验中,我想定义这样的角色

[Flags]
public enum Role
{
   Staff = 0,
   Supervisor = 1,
   Manager = 2,
   Admin = 4,
   HelpDesk = 8 
}
原因是一个客户通常有几个相关角色,例如,某人是Bob的主管,他也是IT部门的经理。在这种情况下,他的角色是
role.Supervisor | role.Manager
,因此他可以使用role.Supervisor提供的所有功能(例如批准Bob的离职申请),同时他可以批准所有IT部门员工的离职申请。该操作看起来像:

[CheckRole(Role.Supervisor, Role.Manager)]
public ActionResult ApproveLeavingRequest()
{
    //the roles in the constructor of CheckRoleAttribute are OR related
}

[CheckRole(Role.Manager|Role.Supervisor, Role.Admin)]
public ActionRequest ModifySystemSettings()
{
    //this method is provided to a small group of people
    //those who is a manager and a supervisor
    //or he is an admin
}

[CheckRole(Role.Manager|Role.Supervisor|Role.Admin)] 
           //maybe we need to add Role.Boss into the system :)
public ActionRequest IncreasePay()
{
    //only the boss account can invoke this method
}

希望这能有所帮助。

能否显示
CheckRolesAttribute
的定义?CheckRolesAttribute具有以下构造函数:public CheckRolesAttribute();公共CheckRoleAttribute(参数SystemRole.ID[]角色);SystemRole.ID是一个枚举,这是一个很好的答案,我已经完成并实现了它。然而,虽然它解决了我的问题,但它并没有回答最初的问题。。。所以我改变了问题!