首页 文章

授权任何角色的属性

提问于
浏览
0

假设我有WebApi控制器

[Authorize]
public class SomeApiController : ApiController

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

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

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

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

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

1 回答

  • 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);
    }
    

    }

    希望能帮助到你

相关问题