基本上我正在编写自己的'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开发的新手,所以我不确定如何使这项工作。我基本上需要传递角色名称并获取相关值。我该怎么做?
答案 0 :(得分: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;
}