In alcuni scenari è necessario modificare a runtime i ruoli associati al Principal corrente, così da fare in modo che le informazioni dell'utente siano differenti.
ASP.NET 2.0 mette a disposizione le Roles API, attraverso le quali è possibile fare in modo che venga utilizzato il Provider Model, che consente di modificarne le impostazioni attraverso il web.config, senza toccare il codice.
Una delle necessità diffuse in alcuni scenari è quello appunto di fare in modo che un utente abbia, su una sola pagina o su un gruppo di essi, un insieme di ruoli che non siano quelli caricati dal modulo, ma possano essere specificati da altre fonti.
In questo caso è necessario intercettare l'evento GetRoles della classe RoleManagerModule, in modo tale che quando Roles API va a recuperare i ruoli, possano essere sovrascritti con il caricamento locale:
using System; using System.Web; using System.Web.Security; namespace ASPItalia.com.Modules { public class CustomRoleModule : IHttpModule { // inizializzo il module e registro gli ecenti public void Init(HttpApplication application) { RoleManagerModule roleModule = (RoleManagerModule)context.Modules["RoleManager"]; if (roleModule != null) roleModule.GetRoles += RoleManagerEventHandler(GetRoles); } private void GetRoles(object sender, RoleManagerEventArgs e) { HttpContext ctx = HttpContext.Current; // controllo pagina - aggiungere eventualmente un filtro su ruoli/username if (ctx.Request.Path.ToLower().IndexOf("specialpage.aspx")>-1) { // sovrascivo il principal corrente con i ruoli custom ctx.User = new GenericPrincipal(ctx.User.Identity, new string{ "Ruolo1", "Ruolo2"}); // avviso il RoleManagerModule che ho fatto io... e.RolesPopuplated = true; } } } }
Il file con il sorgente va inserito nella directory /App_Code/, oppure (meglio ancora) in una class library, mentre il module va successivamente registrato nel web.config, in questo modo:
<configuration> <system.web> <httpModules> <add name="CustomRoles" type="ASPItalia.com.Modules.CustomRoleModule, App_Code" /> </httpModules> </system.web> </configuration>
Per maggiori informazioni su Roles API si veda:
http://tags.aspitalia.com/Role_API/
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.