【问题标题】:How do I get the value in an enum for a particular name?如何获取特定名称的枚举值?
【发布时间】:2009-08-24 19:47:16
【问题描述】:

基本上,我正在编写自己的“RoleProvider”和“AuthorizeAttribute”版本。我有一个包含所有可能角色列表的枚举(作为位字段):

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 开发的新手,所以我不确定如何进行这项工作。我基本上需要传递一些角色名称并取回相关的值。我该怎么做?

【问题讨论】:

    标签: asp.net asp.net-mvc enums


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助!我能够让这段代码正常工作,尽管我的代码中的另一个错误阻止我现在对其进行测试。来自 PHP,强类型对象/变量的想法对我来说还是有点新,当你知道如何使用它时肯定有很大的优势 =] 再次感谢,我真的很感激!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多