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 :
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();
}
}
}
nel web.config :
codice:
<system.web>
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="RoleMaager">
<providers>
<add name="RoleMaager" type="RoleMaager" connectionStringName="DatabaseEntities" />
</providers>
</roleManager>
nella pagina :
codice:
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Roles.GetAllRoles();
}
}
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.
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.