AuthorizeAttribute с пользовательским перенаправлением - PullRequest
4 голосов
/ 15 октября 2010

Я хочу использовать стандартный AuthorizeAttribute (т.е. не наследовать его), но с пользовательским перенаправлением.Это возможно?где я должен проверить 401 и перенаправить?

Я пытался добавить

<customErrors mode="On" > 
       <error statusCode="401" redirect="/Errors/NotAuthorized/" /> 
</customErrors> 

, но это не сработало.

1 Ответ

7 голосов
/ 15 октября 2010

Сделал это в моем ApplicationController:

    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeAttribute), true);
        if (attributes.Length == 0)
            attributes = GetType().GetCustomAttributes(typeof(AuthorizeAttribute), true);
        if (attributes.Length == 0)
            return;

        foreach (AuthorizeAttribute item in attributes)
        {
            if (!Thread.CurrentPrincipal.IsInRole(item.Roles))
            {
                filterContext.Result = new RedirectResult("/Errors/Unauthorized");
            }
        }
    }

Я награжу всех, у кого есть лучшее решение.

...