L'interfaccia IPrincipal non espone un metodo diretto per enumerare i ruoli associati all'utente, quindi di fatto tutte le implementazioni delle protezione in ASP.NET, dalla FormsAuthentication alla WindowsAuthentication, non possiedono questa caratteristica.
E' tuttavia possibile enumera la lista degli utenti, dato che ASP.NET ne tiene traccia internamente, utilizzando Reflection ed accedendo dunque al campo privato m_roles.
<%@ Import namespace="System.Reflection"%> <SCRIPT RUNAT="SERVER" LANGUAGE="C#"> void Page_Load() { System.Security.Principal.IPrincipal princ = HttpContext.Current.User; Type type = princ.GetType(); // chiamata necessaria per far caricare i ruoli princ.IsInRole("Test"); // ricavo i ruoli con reflection String[] roles = (String[]) type.GetField("m_roles", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(princ); dg.DataSource = roles; dg.DataBind(); } </SCRIPT> <asp:datagrid id="dg" runat="server" />
Ovviamente essendo basato su Reflection questo approccio non è garantito che funzioni su future versioni di ASP.NET, ma al momento per la 1.1 compie egregiamente il proprio lavoro.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.