授权任何角色的属性

时间:2013-11-19 12:30:00

标签: c# asp.net-mvc asp.net-web-api authorization

假设我有WebApi控制器

[Authorize]
public class SomeApiController : ApiController

控制器操作方法本身没有任何[Authorize][AllowAnonymous]属性。

如果用户没有角色,我希望Authorize属性返回401(未授权)错误 - 似乎是合乎逻辑的(如果用户有角色但现在没有ANY - 即使用户已经过身份验证,也不应允许他执行操作) 。我看过asp.net mvc webstack我在Authorize属性中找到了以下代码:

if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
{
    return false;
}

所以看起来如果我们没有传递角色authorize属性只检查用户是否经过身份验证。在角色列表中设置每个角色对我来说都不是一个选项(我的意思是[Authorize(Roles="role1,role2,...")])。

因此问题 - 我可以以某种方式实现设置Authorize属性以检查用户是否具有任何角色。或者最好编写从上面继承的自定义属性?

1 个答案:

答案 0 :(得分:0)

创建如下所示的自定义属性:

public override void OnAuthorization(AuthorizationContext filterContext)
{
    string[] userRoles = System.Web.Security.Roles.GetRolesForUser(filterContext.HttpContext.User.Identity.Name);

    if (!userRoles.Any())
    {
        throw new HttpException(401, "Unauthorized");
    }
    base.HandleUnauthorizedRequest(filterContext);
}

}

希望有所帮助