2009-08-29 16 views
27

Come viene determinato il tag di autorizzazione se l'utente è autorizzato o meno?Come funziona il tag Authorize? - ASP.NET MVC

Come dire, se un utente effettua l'accesso e tenta di accedere a una vista con un tag Autorizza. Come determina se un utente è autorizzato o meno? Fa una query al database e controlla?

Che ne dici se vanno a una vista con un'autorizzazione di ruolo? Esamina la tabella dei ruoli di appartenenza?

Mi chiedo solo perché ho le tabelle di appartenenza ASP.NET che considerano nomi utente duplicati. Io uso un serio di campi per determinare quale utente è cosa, consentendo agli utenti di avere lo stesso nome utente duplicato, ma rimanere unico nel mio database.

Questo mi ha costretto a scrivere metodi personalizzati per molti articoli di appartenenza a .NET poiché utilizzava "userName" per cercare invece di usare UserId.

Così ora mi chiedo se questo potrebbe essere il caso con il tag Autorizza. Dal momento che non ho idea di come funzioni e come se non stavo usando l'abbonamento a .NET non avrei la minima idea di come lo determinerebbe.

+0

Non ho una risposta diretta alla tua domanda, ma ricorda che ASP.NET MVC è open source e puoi verificarlo da solo. Suppongo che richieda solo il provider di appartenenza. – JoshJordan

risposta

24

Il tag Authorize utilizza tutti i controlli di appartenenza incorporati da ASP.NET. È MOLTO facile interpretare il proprio tag. Per esempio:

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) throw new ArgumentNullException("httpContext"); 

     // Make sure the user is authenticated. 
     if (httpContext.User.Identity.IsAuthenticated == false) return false; 

     // Do you own custom stuff here 
     bool allow = CheckIfAllowedToAccessStuff(); 

     return allow; 
    } 
} 

È quindi possibile utilizzare il tag [MyAuthorize] che utilizzerà i tuoi controlli personalizzati.

+0

Come funziona la compilazione del controllo di appartenenza? Usa userName o UerId? – chobo2

+0

Non sono sicuro al 100% ma penso principalmente controlla httpContext.User.Identity.IsAuthenticated e restituisco il suo valore ma so che ha anche la capacità di controllare i ruoli. – Kelsey

+0

hmm Non so se sembra che non funzioni Posso ancora vedere la pagina. Mette solo l'url di ritorno nel mio url e questo è tutto. – chobo2

14

ControllerActionInvoker analizza l'attributo e chiama OnAuthorization() su di esso quando è il momento di verificare le credenziali.

Il metodo AuthorizationAttribute.OnAuthorization() controlla essenzialmente per vedere se User.Identity.IsAuthenticated è vero o no. Ciò si basa solo sulla funzionalità di FormsAuthentication o su qualsiasi altro schema di autenticazione che si sta utilizzando.

Problemi correlati