12 messaggi dal 21 settembre 2014
Buongiorno a tutti, sono nuovo della programmazione ASP e mi sto cimentando in una applicazione MVC molto semplice in cui però avrei bisogno di gestire i ruoli degli utenti che si collegano per visualizzare o meno alcune parti della pagina.
Ora l'autenticazione la faccio tramite FormsAuthentication su cookie vorrei però gestire i ruoli nel modo più semplice possibile avendo soltanto 3 tipologie di utenti (cliente, fornitore e Admin). Ho letto parecchi siti dove parlano di questo argomento ma tutti utilizzando DB o ActiveDirectory che io eviterei volentieri, vi è un metodo per "cablare" i ruoli direttamente all'interno dell'applicazione?

Grazie per i consigli.
59 messaggi dal 17 maggio 2010
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 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.