Как прочитать права доступа из маски доступа? - PullRequest
1 голос
/ 16 ноября 2010

Пользователь может иметь следующие права доступа:

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

Когда права доступа сохраняются в базе данных, только один номер используется для представления всех прав доступа для этого пользователя.

например

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

Как получить все права доступа для данного номера (маска доступа)?

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

9 голосов
/ 16 ноября 2010
[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;
4 голосов
/ 16 ноября 2010
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 на «* 1006».*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...