首页 文章

如何获取特定名称的枚举值?

提问于
浏览
1

基本上我正在编写自己的'RoleProvider'和'AuthorizeAttribute'版本。我有一个 Enum(作为一个位字段),列出了所有可能的角色:

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

我的 AuthorizeAttribute 与现有的类似。在我的逻辑中,我遍历每个“授权”角色并检查用户是否属于它。 _rolesSplit 是 AuthorizeAttribute 中为特定操作提供的角色数组。 httpContext.Session [3]是表示用户角色的整数。

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

return false;

这是我无法工作的部分:APICText.Global.Roles [6]。我是.NET 开发的新手,所以我不确定如何使这项工作。我基本上需要传递角色名称并获取相关值。我该怎么做呢?

1 回答

  • 3

    你需要的是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;
    }
    

相关问题