MVC授权角色转到登录视图?

时间:2013-10-24 09:58:37

标签: asp.net-mvc

将[Authorize(Roles =“admin”)]放在视图上,它在用户被重定向时起作用,但是,尽管它们已经登录,但它们总是被重定向到登录视图。 如何更改此内容以使其进入错误页面或类似内容?

2 个答案:

答案 0 :(得分:1)

您可以像这样创建自定义授权属性

public class CustomAuthorize : AuthorizeAttribute
    {

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
            else
            {
                filterContext.Result = new RedirectToRouteResult(new
                RouteValueDictionary(new { controller = "Home", action = "UnAuthorized" }));

            }
        }
    }

并像这样使用

[CustomAuthorize(Roles="admin")] 

希望这有帮助

答案 1 :(得分:0)

我使用了问题中的代码Prevent FormsAuthenticationModule of intercepting ASP.NET Web API responses而不是提供的重复内容,并相应地进行了修改:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeCustom : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            filterContext.Result = new RedirectResult("/Error/Unauthorized");
        }
        else
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
            }
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
} 

然后只为“/ Error / Unauthorized”路径创建了一个视图,并将属性[Authorize]更改为[AuthorizeCustom]。现在,未经授权的人员将被重定向到按预期登录,并且不在角色中的人被重定向到自定义视图。