2010-09-22 14 views
5

Sono attualmente codifica duro i ruoli autorizzati nel filtro nelle mie applicazioni MVC in questo modo:la mappatura dinamicamente ruoli ai controller in ASP.Net MVC

[Authorize(Roles = "Administrator,Manager")] 

Mi piacerebbe avere alla fine un modo per mappare la ruoli per ciascun controller, in modo che l'amministratore del sito possa gestire l'assegnazione dei ruoli che possono eseguire ciascuna serie di azioni.

string roles = DoSomethingToGetAllowableRoles(controllerName); 

[Authorize(Roles = roles)] 

sto immaginando che ho bisogno di avere una tabella di database che tiene in qualche modo un elenco di ciascun controller, e poi un altro tavolo mappatura dei controllori ai ruoli. Quello che mi piacerebbe è una pagina in cui posso elencare ogni controller e quindi avere un set di caselle di controllo che elenca ogni ruolo che si applica a quel controller.

Chiunque ha un esempio o può guidarmi in una direzione che lo porterà a termine?

risposta

8

Avrete bisogno di scrivere il vostro filtro di autorizzazione (probabilmente estendendo il built-in).

Il motivo è che non è possibile assegnare i parametri di attributo dinamicamente in questo modo.

Non è necessario eseguire il pasticcio con il codice sorgente MVC: è sufficiente creare una classe che eredita da System.Web.Mvc.AuthrorizeAttribute, eseguire l'override di AuthorizeCore e quindi utilizzare l'attributo al posto del valore predefinito:

public class CustomAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // Put your custom logic here, returning true for success and false for failure, 
     // or return base.AuthorizeCore(httpContext) to defer to the base implementation 
    } 
} 
+0

Suppongo che sia parte di quello che stavo cercando di scoprire, se è possibile senza fare casino con il codice sorgente MVC ... grazie! – Ben

+0

Non è così difficile come si potrebbe pensare. Ho dato un esempio. –

Problemi correlati