2010-11-16 68 views
1

用戶可以有以下訪問權限:如何從訪問掩碼中讀取訪問權限?

Read = 1 
Create = 2 
Edit = 4 
Delete = 8 
Publish = 16 
Administer = 32 

當訪問權限保存在數據庫中,只有一個號碼用於表示該用戶的所有訪問權限。

例如

3 = Read + Create 
25 = Read + Delete + Publish 

如何獲得給定數字(訪問掩碼)的所有訪問權限?

任何幫助將不勝感激!

回答

4
var mask = (AccessRights)25; 

var rightsForMask = Enum.GetValues(typeof(AccessRights)) 
         .Cast<AccessRights>() 
         .Where(x => mask.HasFlag(x)); 

foreach (var right in rightsForMask) 
{ 
    // displays "1:Read", "8:Delete", "16:Publish" 
    Console.WriteLine((int)right + ":" + right); 
} 

// ... 

[Flags] 
public enum AccessRights 
{ 
    Read = 1, Create = 2, Edit = 4, Delete = 8, Publish = 16, Administer = 32 
} 

如果你不使用.NET4那麼HasFlag方法將不可用,在這種情況下,你需要將Where條款更改爲Where(x => (mask & x) == x)

+0

+1 .HasFlag – 2010-11-16 13:29:57

+0

非常感謝! – 2010-11-16 13:33:43

9
[Flags] 
public enum MyFlags 
{ 
    Read = 1, 
    Create = 2, 
    Edit = 4, 
    Delete = 8, 
    Publish = 16, 
    Administer = 32, 
} 

要聲明

MyFlags readCreate = MyFlags.Read | MyFlags.Create; 

爲了測試

bool hasRead = (readCreate & MyFlags.Read) == MyFlags.Read; 
bool hasEdit = (readCreate & MyFlags.Edit) == MyFlags.Edit;