Autenticazione di ASP.NET: Forms Authentication con roles

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:

Immagine

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:

Immagine

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:

Immagine

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

Immagine

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.
tyler77 scrive:
Autenticazione di ASP.NET: Forms Authentication con roles

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' ...
mercoledì 7 maggio 2008

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC