使用Enum Flags如何?

时间:2012-09-23 01:45:12

标签: c# asp.net-mvc enums

目前我的网站有4个权限

Edit
Delete
Add
View

当有人订阅其他人时,每个人都会获得查看权限。

目前我将每个作为一个列存储在我的数据库中作为位值。

我在想也许我应该使用带有标志的枚举,但我有一些问题。

  1. 用户将能够选择用户权限(eveyone获取您无法接收的视图)。现在,我很容易使用复选框,然后将bool值保存到db。
  2. 我的问题是将复选框转换为枚举类型的最佳方法是什么?因此,如果他们选择添加权限,我可以将其映射到正确的枚举类型。

    想知道是否有更好的方式

    PermissionTypes t;
    if(add == true)
    {
       t = PermissionTypes.Add
    }
    
    if(edit == true)
    {
       t += PermissionTypes.Edit // not sure if you even can do this.
    }
    

    我知道使用枚举标志你可以使用管道并执行类似这样的操作

    PermissionTypes t = PermissionTypes.Add | PermissionTypes.Edit
    

    我想知道在我的枚举中添加另一种类型

    是一种好习惯
    AddEdit = Add | Edit
    

    我认为可以导致许多组合(想象一下,如果我有10个权限或类似的东西)。

1 个答案:

答案 0 :(得分:2)

枚举只是整数值。通过将枚举值设置为2的不同幂,您可以轻松地获得所需的任何组合:

enum ePermissions
{

   None = 0,
   View = 1,
   Edit = 2,
   Delete = 4,
   Add = 8,
   All = 15
}

ePermissions t;
t = (ePermissions)((add?ePermissions.Add:ePermissions.None) | (delete?ePermissions.Delete:ePermissions.None) | ...);

如果您想知道某个用户是否具有添加权限,请执行以下操作:

canAdd = (currentPermission & ePermissions.Add) != 0;