2010-11-16 6 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 –

+0

спасибо! –

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; 
Смежные вопросы