【发布时间】:2019-05-29 11:43:45
【问题描述】:
我需要在 C# Web api 的控制器中允许多个角色访问方法。
我有一个自定义的AuthorizeAttribute,它接受一个角色类型的枚举,我怎样才能让它接受多个枚举,即。一个可变长度的枚举数组。
这是我为Attribute写的代码:
private readonly RoleEnum roleInApplication;
public ScopeAuthorizeAttribute(RoleEnum roleInApplication)
{
this.roleInApplication = roleInApplication;
}
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
.......
var relatedPermisssionRole = (db call to get the rolename..etc)
RoleEnum role;
if (Enum.TryParse(relatedPermisssionRole, out role) && role == roleInApplication)
{
// Succeed if the scope array contains the required scope
return;
}
}
HandleUnauthorizedRequest(actionContext);
}
在控制器中,我是这样使用它的:
[ScopeAuthorize(RoleEnum.ADMIN)]
public async Task<IHttpActionResult> Create(MyModel model)
如何允许多个角色?例如。
[ScopeAuthorize(RoleEnum.ADMIN, RoleEnum.USER)]
public async Task<IHttpActionResult> Create(MyModel model)
【问题讨论】:
-
我觉得你需要
[Flags]。 -
你知道标志枚举吗?这允许您使用按位或将多个枚举明显地组合成一个枚举。
-
@Sweeper 值得注意的是,除了更改
ToString的输出之外,flags 属性对功能的作用几乎没有。 (哦和Enum.IsDefined和Enum.Parse)