MVC Authorize属性必须满足所有要求,是否只能满足一个?

时间:2014-02-03 14:28:43

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

我认为我希望能够被管理员或特定用户访问。所以我添加了这个属性。

[Authorize(Roles = "Admin", Users = "john, jane, jim" )]

我希望如果用户遇到角色或用户,他们将被授权。但它似乎只授权符合这两个标准的用户。

是否可以将其作为或?

处理

1 个答案:

答案 0 :(得分:0)

我刚刚创建了一个自定义授权类来处理未经授权的请求并进行自己的比较。我还添加了一个重定向到自定义的未经授权的视图,而不是仅仅抛出401错误。

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            // The user is not authenticated
            base.HandleUnauthorizedRequest(filterContext);
        }
        else if (!Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole) && !Users.Split(',').Any(ex => ex.ToLower().Trim() == filterContext.HttpContext.User.Identity.Name.ToLower()))
        {
            // The user is not in any of the listed roles => 
            // show the unauthorized view
            filterContext.Result = new ViewResult
            {
                ViewName = "~/Views/Shared/Unauthorized.cshtml"
            };
        }
    }
}

然后我只是在属性中使用MyAuthorize而不是Authorize,如此

[MyAuthorize(Users = "john, jane, tim", Roles = "admin")]