Ciao,
dovresti creare una classe derivata da "RoleProvider" e fare l'override dei metodi vari, volendo potresti anche non averne db...
ti faccio un esempio :
nel web.config :codice:public class RoleMaager : RoleProvider { public override void AddUsersToRoles(string[] usernames, string[] roleNames) { throw new NotImplementedException(); } public override void CreateRole(string roleName) { throw new NotImplementedException(); } public override bool DeleteRole(string roleName, bool throwOnPopulatedRole) { throw new NotImplementedException(); } public override string[] GetAllRoles() { throw new NotImplementedException(); } public override string[] GetRolesForUser(string username) { return new string[] { "Admin" }; } public override string[] GetUsersInRole(string roleName) { throw new NotImplementedException(); } public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { base.Initialize(name, config); } public override bool IsUserInRole(string username, string roleName) { throw new NotImplementedException(); } public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) { throw new NotImplementedException(); } public override bool RoleExists(string roleName) { throw new NotImplementedException(); } public override string[] FindUsersInRole(string roleName, string usernameToMatch) { throw new NotImplementedException(); } public override string ApplicationName { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } }
nella pagina :codice:<system.web> <authentication mode="Windows" /> <roleManager enabled="true" defaultProvider="RoleMaager"> <providers> <add name="RoleMaager" type="RoleMaager" connectionStringName="DatabaseEntities" /> </providers> </roleManager>
in questo scenario, prima di tutto viene chiamato (alla compilazione...) il metodo Initialize, dalla quale ottengo le varie informazioni in forma di key valore (da config) e il nome dell'applicazione, qui posso impostare ad esempio la connessione ad un db, successivamente, siccome ho utilizzato l'attributo "[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]" nella pagina chiamata, viene chiamato GetRolesForUser, che mi passa il nome utente (in questo caso quello di windows) a questo punto, dentro il metodo potrei confrontarlo anche con un file di testo, o addirittura come ho fatto nell'esempio (ma solo come esempio!) dare a tutti il ruolo "Admin" (ma avrei potuto usare anche lavaCessi! bansta che nell'attributo lo impostavo così per accedere), quindi avendo avuto l'accesso alla pagina, nel load chiedo tutti i ruoli, chiamando così il metodo GetAllRoles (che non ho implementato), li avrei potuto restituire tutti i ruoli che volevo, e così via anche per gli altri metodi.codice:[PrincipalPermission(SecurityAction.Demand, Role = "Admin")] public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Roles.GetAllRoles(); } }
Ovviamente ho fatto qualche prova giusto così, quindi non sono esperto nel campo, ma se hai bisogno di una mano, prova a chiedere, magari riesco a dartela.
![]()

Rispondi quotando