Ciao,
in realtà ti basterebbe crearti una classe che erediti da System.Web.Security.RoleProvider, poi eseguire tutti i vari override, a quel punto i "ruoli" li peschi da dove ti pare.
Se vuoi puoi dare uno sguardo a questo post
http://forum.aspitalia.com/forum/post/405713/Dilemma-Tecnologia-Passare-Asp.net.aspx?PageIndex=2 in cui in realtà non si discute direttamente di questa questione, ma c'è un link ad una soluzione che comprende un progetto con un esempio di come puoi fare. Il progetto lo trovi direttamente dentro alla soluzione di questo link
https://onedrive.live.com/redir?resid=7545DD636BC09EB5!610&authkey=!AE2TIMjPRps5bkU&ithint=file%2czip, si chiama "Authentication", mentre la classe che ti interessa si chiama "CustomRoles". Non è affatto complessa da creare, ma se vuoi puoi usare anche direttamente quella, ed in questo caso devi solo aggiungere la dll (o direttamente il progetto con sorgente o anche solo la classe e relative interface) alla tua soluzione e scrivere una cosa del genere :
public class EntitiesRoles : CustomRoleProvider<StaticRoles, Role> { }
public class StaticRoles : IAuthenticationAndRolesContext
{
public StaticRoles()
{
this.Roles = new List<IRole>(new Role[]
{
new Role() { Name = "Admin" },
new Role() { Name = "Cliente" },
new Role() { Name = "Fornitore" }
});
this.Users = new List<IAuth>(new User[]
{
new User(){Name="Admin", CustomRoles = Roles},
new User(){Name="Cliente",CustomRoles=new List<IRole>(new Role[] { new Role() { Name = "Cliente" }})},
new User(){Name="Fornitore",CustomRoles=new List<IRole>(new Role[] { new Role() { Name = "Fornitore" }})},
new User(){Name="AltroNome",CustomRoles=new List<IRole>(new Role[] { new Role() { Name = "Fornitore" }})},
new User(){Name="AltroAncora",CustomRoles=new List<IRole>(new Role[] { new Role() { Name = "Cliente" }})},
new User(){Name="ChiMiPare",CustomRoles=new List<IRole>(new Role[] { new Role() { Name = "Cliente" }})}
}
}
public ICollection<IRole> Roles { get; set; }
public ICollection<IAuth> Users { get; set; }
public int SaveChanges()
{
return 0;
}
public void Dispose()
{
}
}
public class User : IAuth
{
public string AUTHCOOKIE { get; set; }
public string Password { get; set; }
public ICollection<IRole> CustomRoles { get; set; }
public string Name { get; set; }
public IEnumerable<string> Roles { get; set; }
}
public class Role : IRole
{
public string Name { get; set; }
}
Poi ovviamente nel web.config, dentro la sezione "<system.web>" aggiungi questo :
<roleManager enabled="true" defaultProvider="EntitiesRoles" cacheRolesInCookie="true">
<providers>
<add name="EntitiesRoles" type="TUONAMESPACE.EntitiesRoles,TUONAMESPACE"/>
</providers>
</roleManager>
a questo punto quando il tuo utente (già autenticato) avrà come userName il nome corrispondente che hai attribuito nel provider (Name=Admin per Admin, Name=Cliente per Cliente ecc.) avrà accesso o meno a quella risorsa protetta.
Da notare che in questo esempio "Admin" possiede sia "Admin", sia "Cliente", e sia "Fornitore". Diversamente imposta come meglio credi.
Modificato da u235 il 31 ottobre 2014 02.45 -
Modificato da u235 il 31 ottobre 2014 02.47 -