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: 200x

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 
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.