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

时间:2011-09-15 02:59:41

标签: c# arrays attributes

我有一个权限属性,它获取角色的枚举值列表:

    [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 ...
}

你可以在这里看到重复。我真的希望在变量或初始化列表中有两个角色,我可以将它传递给属性和方法。创建const数组不起作用。有办法做到这一点吗?我可以以某种方式存储阵列初始化器吗?

非常感谢任何帮助!

更新

我已经将角色枚举成了一个Flags枚举(并给出了适当值的项)。这意味着我可以将值或值一起给出单个恒定值。 我现在可以在Attribute和方法中使用该常量值。 感谢下面的Danny Chen。

1 个答案:

答案 0 :(得分:4)

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

[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
}

希望这有帮助。