3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
GenericIdentity
Per risolvere il problema precedente dobbiamo solo modificare o aggiungere al global.asax la routine:
void Application_AuthenticateRequest(Object s, EventArgs e)Questo evento viene generato ad ogni richiesta di una pagina ASP.NET esattamente prima dell'autenticazione, ed è proprio in questa routine dobbiamo inserire il nostro codice per la personalizzazione e per l'aggiunta all'utente del gruppo appropriato. Ecco il codice per ottenere questo:
public void Application_AuthenticateRequest(Object s, EventArgs e)
{
if (Request.IsAuthenticated) {
string nome=User.Identity.Name;
string[] arr=new string[]{"gruppo1","gruppo2"};
GenericIdentity identita=new GenericIdentity(nome);
Context.User= new GenericPrincipal(identita,arr);
}
}Nella riga 3 controlliamo se l'utente è autenticato, in caso positivo, nella riga successiva viene preso il nome, e nella riga 5 creiamo un array di stringhe dove memorizziamo i "roles" per tale utente. Nella riga 7 creiamo una nuova GenericIdentity per sostituire quella istanziata dal framework per noi, quindi la memorizziamo con l'aggiunta dell'array con i gruppi di appartenenza per l'utente nel Context.User.
Il nostro lavoro è concluso. Ora potremo proteggere le nostre directory inserendo nei permessi il nome dei gruppi abilitati:
<configuration>
<system.web>
<authorization>
<allow roles="Gruppo1,Gruppo2" />
<deny users="*" />
</authorization>
</system.web>
</configuration>In questo caso solo gli utenti appartenenti a Gruppo1 o Gruppo2 potranno accedere alle pagine ASP.NET di quella sezione.
Ovviamente questo tipo di protezione non funziona con le pagine ASP.
Un esempio reale
Eccoci ad un esempio reale che scioglierà i dubbi di questo approccio al nostro originale problema.
Il tutto si può scaricare dall'allegato contenuto alla fine di questo articolo.
Ho creato un banalissimo sito con una pagina principale visibile da chiunque con tre sotto cartelle che hanno tutte autorizzazioni differenti. Ecco la home-page:

Le tre sottocartelle sono accessibili dai link di fondo pagina. Admin, com'è descritto nella pagina, sarà accessibile solo agli utenti con il role "Admin", la cartella Manager agli utenti con il role "Admin" e "Manager" e la cartella Utente agli utenti con roles precedenti con l'aggiunta del role "Utente". Se clicchiamo su uno di questi link, non essendoci ancora autenticati, verremo inviati nella pagina di login:

Nella tabella sottostante sono visualizzati gli utenti memorizzati nel database Access presente nella cartella "db" e che hanno accesso a questo sito; nell'ultima colonna viene anche indicato la role per ogni singolo utente. A seconda del nome utente con cui ci autenticheremo potremo accedere alle tre sotto cartelle prima menzionate in cui è presente un solo file ASP.NET che visualizza un banale messaggio di benvenuto con il nome con cui si siamo autenticati:

Se proviamo ad accedere ad una directory con un utente che non ha le necessarie autorizzazioni sarà visualizzato un messaggio come questo:

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Utilità
Contenuti

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!

Ciao, sono alle prese con le Roles di asp.net 2.0, ho letto il tuo tutorial ma ahimè una volta riadattato al mio misero progettino non funziona.E' ...
Continua »»» | Rispondi »»»