AuthorizeAttribute je základním autorizačním principem v ASP.NET MVC. Odekorování akce nebo celého controlleru dovoluje omezit přístup pouze pro seznam uživatelů, popřípadě rolí poskytovaných RoleProviderem.
V případě neúspěšné autorizace se vrací HttpUnauthorizedResult, který zapíše do výstupu HTTP kód 401 (neautorizovaný přístup) a z něj se provede přesměrování na přihlašovací obrazovku. Pokud chcete po neúspěšné autorizaci přesměrovat jinam, lze to připravit jednoduchým rozšířením právě AuthorizeAttribute:
/// <summary>
/// Atribut rozšiřující <see cref="AuthorizeAttribute"/> o možnost přesměrovat na jinou adresu než je defaultní přihlašovací v případě neúspěšné autorizace.
/// </summary>
public class AuthorizeRedirectAttribute : AuthorizeAttribute
{
/// <summary>
/// Vrací nebo nastavuje akci, na kterou se provede přesměrování při neúspěšné autorizaci
/// </summary>
public string RedirectAction { get; set; }
/// <summary>
/// Vrací nebo nastavuje controller, na který se provede přesměrování při neúspěšné autorizaci
/// </summary>
public string RedirectController { get; set; }
/// <summary>
/// Vrací nebo nastavuje route values, které se předají akci při přesměrování při neúspěšné autorizaci
/// </summary>
public object RedirectRouteValues { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
// neuatorizovany pozadavek?
if (filterContext.Result is HttpUnauthorizedResult)
{
// vygenerovat adresu pro presmerovani
string redirectUrl = new UrlHelper(filterContext.RequestContext).Action(RedirectAction, RedirectController, RedirectRouteValues);
// presmerovat
filterContext.Result = new RedirectResult(redirectUrl);
}
}
}
Takto upravenému atributu předáte akci a případně i controller a route values a přesměrování při neautorizovaném přístupu bude obstaráno automaticky. Například:
[AuthorizeRedirect(RedirectAction = "RegistrationAbout")]
public ActionResult MyProfile()