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.
Approfondimenti
Effettuare il tracing asincrono delle chiamate a un'applicazione ASP.NET Core
Eseguire lo shutdown pulito di un'applicazione ASP.NET Core
Registrare un servizio generico nella dependency injection di ASP.NET Core
Un componente per gestire lo stato della connessione di rete in Blazor WebAssembly
Eseguire del codice personalizzato al click di una checkbox in Blazor
.NET Conference Italia 2020
L'agenda di #netconfit è online => https://aspit.co/netconfit-20 3 track, tante sessioni e una keynote speciale di @shanselman per la più importante conferenza in lingua italiana su .NET! Vi aspettiamo il 24/11. Iscrizioni sempre aperte! #donet #aspnet #netconf
Testare le impostazioni CORS di un'applicazione ASP.NET Core