Vývojářský blog Tomáše Jechy

Tisk článku Tisk článku

Rozšířený AuthorizeAttribute v ASP.NET MVC

[Zpět na blog]

Datum: 28. 1. 2010 13:41       Autor: Tomáš Jecha       Zobrazeno: 558x

Kategorie: ASP.NET, C#


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()

> Na začátek

 

Hodnocení:

Hlasů: 0
Zvolte své hodnocení

Tomáš Jecha

Tomáš Jecha je Microsoft MVP pro Visual Basic. Pracuje jako .NET vývojář a působí jako člen Liberecké pobočky WUGu starající se o přednášky pro IT veřejnost. Jeho nejoblíbenější programovací jazyk je Visual Basic. V současné době se zajímá především o SQL Server a technologie přicházející s .NET 3 a 3.5. Společně s Tomášem Hercegem napsal tento web a stará se o jeho administraci.

Podpořte vznik dalších článků
RSS Feed RSS Feed

Diskuse

1 

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
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
1 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.