2010-01-14 23 views
6

Forse mi sto avvicinando a questo modo sbagliato e dovrei fare tutto nei filtri azione, in tal caso per favore indicami la giusta direzione!ASP.NET MVC verifica se l'utente appartiene a [x] gruppo

Sto installando la mia applicazione ASP.NET MVC in modo che l'azione di un indice HomeController offre due diversi tipi di contenuti, in questo modo:

if(Request.IsAuthenticated) 
    return View("IndexRegistered"); 
else 
    return View("IndexGuest"); 

Questo va bene, ma dire che voglio dividerlo in tre così gli amministratori ottengono la propria pagina ...

Qualcuno può illuminarmi sul pezzo mancante di questo puzzle?

risposta

20

Utilizzare la proprietà Roles del Autorizza Action Filter:

[Authorize(Roles="Administrators,Moderators")] 
public ActionResult SomeAction(){ 

} 

Oppure utilizzare il metodo User.IsInRole():

if(User.IsInRole("Administrator")) { ... } 
+0

http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/ –

+3

se (User.IsInRole ("Amministratore")) era esattamente quello di cui avevo bisogno, grazie! Ancora aperto all'input se esiste un modo migliore per farlo. Nella prima istanza di utilizzo di Autorizza, sembra che sarebbe un modo migliore per me (anche se non riesco davvero a capire perché), a meno che non lo comprenda, offre solo una condizione di permessi/rifiuto coperta, non più condizioni che sono quello che sto cercando – nathanchere

+0

È possibile aggiungere più ruoli alla proprietà Role, aggiornerò il codice. –

2

Se si guarda al provider di autenticazione che viene out-of-the-box in i modelli di progetto MVC predefiniti è facile aggiungere il proprio supporto di ruolo e tracciarlo in sessione, quindi il codice sopra riportato diventerebbe:

if(Request.IsAuthenticated) 
{ 
    if(Session["Role"] == "Administrator") 
    return View("IndexAdministrator"); 
    else 
    return View("IndexCustomer"); 
} 
else 
    return View("IndexGuest"); 

e poi apre possibilità come:

if(Request.IsAuthenticated) 
    return View("Index" + Session["Role"]); 
else 
    return View("IndexGuest"); 
Problemi correlati