Condividi tramite


Informazioni sulla gestione dei ruoli

Aggiornamento: novembre 2007

La funzionalità di gestione dei ruoli consente di gestire più agevolmente le autorizzazioni specificando le risorse a cui possono accedere gli utenti di un'applicazione. Mediante la gestione dei ruoli è possibile trattare i gruppi di utenti come singole unità, caratterizzate dai ruoli assegnati a ciascun utente, ad esempio gestore, addetto alle vendite, membro e così via. In Windows i ruoli vengono creati tramite l'assegnazione degli utenti a gruppi quali Administrators, Power Users e così via.

Una volta definiti i ruoli, è possibile creare le regole di accesso per l'applicazione. Se, ad esempio, si desidera che un insieme di pagine del sito possa essere visualizzato solo dai membri oppure che una parte di una pagina venga visualizzata o nascosta a seconda che l'utente sia o meno un gestore, è possibile utilizzare i ruoli per definire tali tipi di regole in modo indipendente dai singoli utenti dell'applicazione. Ad esempio, anziché assegnare ai singoli membri l'autorizzazione di accesso alle pagine riservate ai membri, è possibile concedere l'accesso al ruolo di membro, quindi aggiungere e rimuovere utenti in tale ruolo in base alle nuove iscrizioni o alla scadenza di quelle esistenti.

Gli utenti possono appartenere a più ruoli. Se ad esempio il sito è un forum di discussione, alcuni utenti potrebbero avere sia il ruolo di membro che quello di moderatore. Se a ogni ruolo vengono assegnati diritti differenti sul sito, un utente con tutti e due i ruoli disporrà di entrambi gli insiemi di diritti.

La creazione di ruoli può essere utile anche quando il numero di utenti dell'applicazione è limitato. I ruoli offrono la possibilità di modificare le autorizzazioni e di aggiungere e rimuovere utenti senza dover apportare modifiche a tutto il sito. Man mano che si definiscono ulteriori regole di accesso per l'applicazione, la praticità dei ruoli per applicare le modifiche a gruppi di utenti si fa sempre più evidente.

Ruoli e regole di accesso

Lo scopo principale dell'impostazione dei ruoli è quello di fornire un metodo semplice per gestire le regole di accesso per gruppi di utenti. Innanzitutto vengono creati gli utenti, quindi assegnati gli utenti a ruoli (o a gruppi in Windows). Successivamente, viene in genere creato un insieme di pagine da rendere accessibili solo a determinati utenti. Spesso queste pagine con accesso limitato vengono salvate in una cartella distinta. È quindi possibile stabilire regole per concedere e negare l'accesso alle cartelle con restrizioni. È ad esempio possibile configurare il sito in modo da consentire solo a membri o a gestori di accedere alle pagine della cartella con accesso limitato, negando l'accesso a tutti gli altri utenti. Se un utente non autorizzato tenta di visualizzare una pagina con accesso limitato, riceverà un messaggio di errore oppure verrà reindirizzato a una pagina che si sarà appositamente specificata.

Gestione dei ruoli, identità degli utenti e appartenenza

Per utilizzare i ruoli, è necessario essere in grado di identificare gli utenti nell'applicazione in modo da determinare se appartengono a ruoli specifici. È possibile configurare l'applicazione per la verifica dell'identità degli utenti specificando due diversi tipi di autenticazione: l'autenticazione di Windows e l'autenticazione basata su form. Se l'applicazione viene eseguita in una rete locale (LAN, Local Area Network), ossia se si tratta di un'applicazione Intranet basata sul dominio, è possibile identificare gli utenti utilizzando il nome dell'account di dominio di Windows. In tal caso, i ruoli di un utente corrisponderanno ai gruppi di Windows a cui appartiene.

Nelle applicazioni Internet, o in altri scenari in cui gli account di Windows non risultano applicabili, è possibile utilizzare l'autenticazione basata su form per determinare l'identità degli utenti. A questo scopo, viene in genere creata una pagina nella quale gli utenti possono immettere un nome utente e una password, per poi sottoporre a convalida le credenziali utente fornite. È possibile eseguire gran parte di queste operazioni automaticamente tramite i controlli ASP.NET Login o, in alternativa, creare una pagina di accesso e utilizzare la classe FormsAuthentication per determinare l'identità di un utente.

Nota:

I ruoli non possono essere utilizzati con utenti per i quali non è stata stabilita un'identità nell'applicazione (utenti anonimi).

Se si utilizzano i controlli Login o l'autenticazione basata su form per stabilire l'identità degli utenti, è anche possibile utilizzare la gestione dei ruoli insieme all'appartenenza. In uno scenario di questo tipo, l'appartenenza viene utilizzata per definire utenti e password, mentre la gestione dei ruoli viene utilizzata per definire i ruoli e assegnare membri a tali ruoli. La gestione dei ruoli, tuttavia, è indipendente dall'appartenenza. Può essere utilizzata anche per la gestione delle autorizzazioni, purché nell'applicazione sia possibile impostare l'identità degli utenti.

Gestione dei ruoli e servizio ruoli ASP.NET

È possibile accedere ai ruoli come servizio di Windows Communication Framework (WCF) utilizzando il servizio ruoli ASP.NET. Il servizio ruoli consente di controllare i ruoli di un utente da qualsiasi applicazione in grado di leggere o utilizzare un servizio WCF. Ad esempio, è possibile controllare i ruoli di un utente da un'applicazione Windows Form, da un'applicazione Web o da un'applicazione che non utilizza .NET Framework. Per ulteriori informazioni sul servizio ruoli, vedere Cenni preliminari sul servizio ruolo di Windows Communication Foundation.

API di gestione dei ruoli

La gestione dei ruoli non ha come unico scopo quello di limitare i diritti per l'accesso a pagine o cartelle, ma fornisce anche un'API che consente di determinare a livello di codice se un utente appartiene o meno a un ruolo. In questo modo è possibile scrivere codice per sfruttare le funzionalità offerte dai ruoli e per eseguire qualsiasi azione dell'applicazione in base all'identità dell'utente e ai relativi ruoli.

Se si stabilisce l'identità degli utenti nell'applicazione, è possibile utilizzare i metodi dell'API di gestione dei ruoli per creare ruoli, aggiungere utenti a ruoli e ottenere informazioni sull'appartenenza degli utenti ai diversi ruoli. Questi metodi consentono di creare un'interfaccia personalizzata per la gestione dei ruoli.

Se nell'applicazione viene utilizzata l'autenticazione di Windows, nell'API di gestione dei ruoli sarà disponibile un minor numero di funzionalità per la gestione dei ruoli. Ad esempio, non sarà possibile utilizzare la gestione dei ruoli per creare nuovi ruoli. In questo caso sarà infatti necessario utilizzare le funzionalità di gestione di utenti e gruppi di Windows per creare account utente e gruppi e assegnare gli utenti ai gruppi. Una volta definite, le informazioni relative a utenti e gruppi di Windows possono essere lette nel sistema di gestione dei ruoli e utilizzate per l'autenticazione.

Se si sta utilizzando il servizio ruoli ASP.NET, è possibile controllare se un utente appartiene a un particolare ruolo o recuperare tutti i ruoli per un utente. Non è possibile, tuttavia, gestire i ruoli tramite l'API del servizio ruoli.

Funzionamento della gestione dei ruoli ASP.NET

Prima di utilizzare la gestione dei ruoli, è necessario attivarla ed eventualmente configurare regole di accesso basate sui ruoli. Una volta eseguite queste operazioni, è possibile utilizzare le funzioni di gestione dei ruoli in fase di esecuzione per sfruttare le funzionalità dei ruoli.

Configurazione della gestione dei ruoli

Per utilizzare la gestione dei ruoli ASP.NET, è necessario attivarla nel file Web.config di un'applicazione utilizzando un'impostazione analoga alla seguente:

<roleManager 
    enabled="true" 
    cacheRolesInCookie="true" >
</roleManager>

I ruoli vengono in genere utilizzati per stabilire regole in base alle quali concedere o negare l'accesso a pagine o cartelle. Queste regole di accesso possono essere configurate nella sezione authorization del file Web.config. Nell'esempio riportato di seguito viene illustrato come consentire l'accesso alle pagine contenute nella cartella MemberPages agli utenti con il ruolo "members" e negarlo a tutti gli altri utenti:

<configuration>
  <location path="MemberPages">
    <system.web>
      <authorization>
        <allow roles="members" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- other configuration settings here -->
<configuration>

Per ulteriori informazioni sull'impostazione delle regole di accesso, vedere Autorizzazione ASP.NET.

È inoltre necessario creare ruoli, ad esempio "manager" o "members", quindi assegnare gli ID utente a tali ruoli. Se nell'applicazione viene utilizzata l'autenticazione di Windows, per creare utenti e gruppi è necessario utilizzare lo strumento Gestione computer di Windows.

Se si utilizza l'autenticazione basata su form, è possibile configurare utenti e ruoli con lo strumento Amministrazione sito Web di ASP.NET. Questa operazione può essere eseguita anche a livello di codice, tramite chiamate a vari metodi di gestione dei ruoli. Nell'esempio riportato di seguito viene illustrato come creare il ruolo members:

Roles.CreateRole("members")
Roles.CreateRole("members");

Nell'esempio riportato di seguito viene illustrato come aggiungere il singolo utente JoeWorden al ruolo manager e come aggiungere contemporaneamente gli utenti JillShrader e ShaiBassli al ruolo members:

Roles.AddUsersToRole("JoeWorden", "manager")
Dim userGroup(2) As String
userGroup(0) = "JillShrader"
userGroup(1) = "ShaiBassli"
Roles.AddUsersToRole(userGroup, "members")
Roles.AddUsersToRole("JoeWorden", "manager");
string[] userGroup = new string[2];
userGroup[0] = "JillShrader";
userGroup[1] = "ShaiBassli";
Roles.AddUsersToRole(userGroup, "members");
Nota:

Le funzionalità di gestione dei ruoli non sono disponibili tramite il servizio ruoli ASP.NET. Il servizio ruoli può restituire informazioni solo su un particolare utente.

Utilizzo dei ruoli in fase di esecuzione

In fase di esecuzione, quando gli utenti visitano il sito, stabiliscono un'identità utilizzando un nome account di Windows oppure effettuando l'accesso all'applicazione. Nel caso di un sito Internet, se gli utenti visitano il sito senza effettuare l'accesso, ossia accedendovi in modo anonimo, saranno privi di identità utente e non apparterranno ad alcun ruolo. Le informazioni sull'utente connesso vengono rese disponibili per l'applicazione tramite la proprietà User. Quando i ruoli sono attivati, in ASP.NET vengono cercati i ruoli dell'utente corrente e aggiunti all'oggetto User per consentirne la verifica. Nell'esempio riportato di seguito viene illustrato come determinare se l'utente corrente appartiene al ruolo "members" e, in caso affermativo, visualizzare un pulsante per gli utenti di tale ruolo:

If User.IsInRole("members") Then
   buttonMembersArea.Visible = True
End If
if (User.IsInRole("members"))
{
   buttonMembersArea.Visible = True;
}

In ASP.NET viene inoltre creata un'istanza della classe RolePrincipal che viene aggiunta al contesto della richiesta corrente. In questo modo è possibile eseguire a livello di codice attività di gestione dei ruoli, ad esempio la verifica degli utenti appartenenti a un ruolo specifico. Nell'esempio riportato di seguito viene illustrato come ottenere un elenco dei ruoli per l'utente attualmente connesso.

Dim userRoles() as String = CType(User, RolePrincipal).GetRoles()
string[] userRoles = ((RolePrincipal)User).GetRoles();

Se nell'applicazione viene utilizzato il controllo LoginView, quest'ultimo verificherà i ruoli dell'utente e potrà creare in modo dinamico un'interfaccia utente in base ai ruoli a cui l'utente appartiene.

Memorizzazione nella cache delle informazioni sui ruoli

Se il browser di un utente è configurato in modo da accettare cookie, ASP.NET consente di memorizzare le informazioni sui ruoli in un cookie crittografato nel computer dell'utente. Ogni volta che viene richiesta una pagina, viene eseguita la lettura del cookie e recuperate le informazioni sui ruoli dell'utente in esso contenute. Questa strategia permette di ridurre al minimo la necessità di recuperare le informazioni sui ruoli dal database. Se nel browser dell'utente i cookie non sono supportati o sono disattivati, le informazioni sui ruoli verranno memorizzate nella cache e mantenute solo per la durata di ciascuna richiesta di pagina.

Vedere anche

Concetti

Provider di gestione dei ruoli

Classi di gestione ruoli

Altre risorse

Sicurezza dei siti Web ASP.NET