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

В основном я пишу свою собственную версию 'RoleProvider' и 'AuthorizeAttribute'. У меня есть Enum (как битовое поле) со списком всех возможных ролей:

namespace myProject.Global
{
    [Flags]
    enum Roles
    {
        Viewer = 1,
        User = 2,
        Admin = 4,
        Superadmin = 8
    }
}

Мой AuthorizeAttribute работает аналогично существующему. В моей логике я перебираю каждую роль «Авторизованный» и проверяю, принадлежит ли ей пользователь. _rolesSplit - это массив ролей, предоставленных в AuthorizeAttribute для конкретного действия. httpContext.Session ["Roles"] - это целое число, представляющее роли пользователя.

 foreach (string roleName in _rolesSplit)
{
    if ((httpContext.Session["Roles"] & myProject.Global.Roles[roleName]) == myProject.Global.Roles[roleName]) return true;
}

return false;

Это часть, над которой я не могу работать: APICText.Global.Roles [roleName] . Я новичок в разработке .NET, поэтому я не уверен, как заставить это работать. Мне нужно передать имя роли и получить обратно связанное значение. Как мне это сделать?

1 Ответ

3 голосов
/ 24 августа 2009

Что вам нужно это Enum.Parse .

Попробуйте что-то вроде этого ...

foreach (string roleName in _rolesSplit)
{
    if (httpContext.Session["Roles"] & (Roles)Enum.Parse(typeof(Roles), roleName) == (Roles)Enum.Parse(typeof(Roles), roleName)) return true;
}

или это ...

foreach (string roleName in _rolesSplit)
{
    Roles role = (Roles)Enum.Parse(typeof(Roles), roleName);
    if (httpContext.Session["Roles"] & role == role) return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...