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()
Tomáš Jecha již několikátým rokem získal ocenění Microsoft MVP. V současné době pracuje ve společnosti AVAST jako architekt a vývojář interních systémů. Působí také jako lektor a konzultant v počítačové škole Gopas. V současné době se zajímá především o SQL Server a technologie nad .NET Frameworkem 4. Společně s Tomášem Hercegem napsal tento web a stará se o jeho administraci.
RedirectRouteValues
Datum: 31.7.2010 11:59
Autor: neregistrovaný (78.24.13.102)
Hodnocení autora: není
Příspěvků: 0
Ahoj, vylepšení AuthorizeAttribute vypadá zajímavě, měl bych však dotaz k jeho použití. Jakým způsobem nastavím property
RedirectRouteValues, když je typu
object a např.
[AuthorizeRedirect(RedirectAction = "UnauthorizedRequest", RedirectRouteValues = new { area="forum" }, Roles = "Admin")]
public ActionResult RemoveThread()
{
...
}
udělat nemohu, kvůli dynamické inicializaci anonymního typu v atributu. Jedná se konkrétně o přesměrování do jiné area, popř. přidat další parametry k uvedené routě.
Děkuji za odpověď, Fero