Come configurare il componente di controllo degli accesi basato sui Ruoli con Yii Framework.
Yii Framework Tutorial
La scorsa volta abbiamo chiarito con un Yii Framework Tutorial un aspetto fondamentale dell’autenticazione con Yii Framework che permetteva di implementare un semplice filtro di Controllo degli accessi come base per limitare l’accesso a utenti autorizzati.
Oggi vorrei focalizzare la vostra attenzione su qualcosa in più, rispetto al semplice granulare controllo di accesso alla vostra applicazione.
Come è facilmente ipotizzabile avremmo bisogno di distinguere all’interno della nostra applicazione gli Utenti, che avranno Ruoli diversi.
RBAC (Role-Based Access Control)
Iniziamo col definire questi possibili ruoli, per esempio per la gestione di un blog come questo.
Per prima cosa cominciamo con individuare il ruolo principale, la nostra applicazione avrà di sicuro almeno un’ utente di tipo proprietario, che possono pensarlo come amministratore dell’Applicazione, inoltre saranno dati ad tutti i permessi per manipolare i contenuti.
Quindi il ruolo del proprietario del sistema, avrà tutti i permessi di gestione applicazione, utenti e contenuti e commenti.
Il progetto avrà di sicuro anche uno o più utenti di tipo redazionale, che saranno autorizzati e avranno alcuni accessi alle funzionalità dei contenuti redazionali, tipo l’inserimento di testi, immagini, video, la modifica e la cancellazione, ma saranno i proprietari per esempio a essere autorizzati a pubblicare i contenuti redatti in bozza dai singoli redattori.
Infine, il Blog potrà avere utenti di tipo lettori registrati, che sono solo abilitati oltre che a vedere soltanto i contenuti come gli utenti ospiti, anche a commentare i contenuti, ma non alterare essi in alcun modo. Per realizzare questo tipo di modello basato sugli accessi su un ruolo di un utente, noi useremo una funzionalità di Yii denominata appunto RBAC (Role-Based Access Control).
ACL o RBAC
Ci sono vari approcci per creare un sistema di autenticazione che permette di associare l’utente a un ruolo ed ereditarne tutte le funzionalità e sotto funzionalità a esso associate, tra i più diffusi c’è l’ACL, che è l’acronimo di Access Conditional List, ma noi ci baseremo in Yii sulla metodologia, più complessa dell’RBAC.
RBAC rappresenta uno stabilito approccio in un sistema di sicurezza computerizzato per gestire i permessi di accessi degli utenti autorizzati. In breve, l’approccio RBAC definisce i ruoli dentro un’applicazione. Permessi per certe operazioni sono così definiti e infine associati con i ruoli. Utenti sono allora assegnati a ruoli e la loro associazione al ruolo permette di fargli acquisire i permessi definiti per quel ruolo.
In base alla mia esperienza professionale, in sistemi basati su J2EE, ho avuto modo di implementare diversi sistemi RBAC proprietari, nelle varie applicazioni che ho avuto modo di realizzare, quindi se avete bisogno di approfondire l’argomento potete contattarmi in merito.
Ma ora focalizziamoci sull’approccio specifico di tale implementazione con Yii Framework, l’ RBAC appunto.
Implementazione RBAC in YII
L’implementazione dell’RBAC in Yii è semplice, elegante e potente. I Fondamenti base dell’ RBAC di Yii sono basati sull’idea di autorizzazione degli oggetti. L’autorizzazione oggetto è semplicemente un permesso di fare cose in un’applicazione. Questi permessi possono essere categorizzati come ruoli, compiti, od operazioni, e come risultato, formano una gerarchia di permessi. I ruoli possono consistere in compiti (o altri ruoli), i compiti possono consistere in operazioni (o altri compiti) e le operazioni rappresentano il livello di permesso più granulare.
Nella nostra applicazione, noi abbiamo bisogno di un ruolo di tipo proprietario. In tal senso, noi creeremo un oggetto di autorizzazione di tipo ruolo con il nome proprietario. Questo ruolo allora consiste a sua volta in compiti di “gestione degli utenti” e “gestione dei contenuti”. Questi compiti consistono a loro volta in diverse operazioni atomiche.
Per esempio, il compito di gestione dell’utente potrebbe consistere di operazioni di creare un nuovo utente, modificare l’utente e cancellarlo, visualizzare una lista di utenti ed effettuare ricerche di utenti. La costruzione di questa gerarchia permette di ereditare tutte queste operazioni e compiti, semplicemente assegnando il ruolo di proprietario all’utente, così che eredita i permessi di operazioni per creare, modificare e cancellare utenti.
Flessibilità RBAC
Tipicamente in RBAC, tu puoi assegnare a un utente a uno o più ruoli e l’utente eredita i permessi a cui sono abilitati tali ruoli. Questo vi permette la massima flessibilità di associare permessi a un’utente con diversi livelli di granularità. Se noi vogliamo solo abilitazione all’operazione di cancellare un’utenti a uno specifico utente, e non dare a esso tutti l’accesso al ruolo di proprietario, noi possiamo semplicemente associare all’utente questa operazione atomica. Questo fa dell’ RBAC in Yii uno strumento molto flessibile.
Vediamo adesso come è possibile configurare in Yii, questo componente, per far ciò noi abbiamo bisogno di configurare il componente di gestione delle autorizzazioni dell’applicazione, che è denominato authManager. Questo componente è responsabile per la memorizzazione dei dati di permesso e gestisce le relazioni tra permessi per decidere se un’utente ha oppure no il permesso per usare particolari operazioni.
Le Gestione autorizzazioni di YII
Yii provvede a tal scopo due tipi diversi di gestione delle autorizzazioni, che sono gestiti dalle seguenti classi: CPhpAuthManager e CDbAuthManager. La differenza tra i due approcci e la seguente: CPhpAuthManager utilizza un file di script per memorizzare i dati di autorizzazione, mentre CDbAuthManager, memorizza i data in un database.
Il nostro authManager viene configurato come un componente dell’applicazione. Configurare la gestione dell’autorizzazione in Yii, consiste semplicemente di specificare al sistema quale di questi due tipi di approcci usare e quindi settare esso nella classe di inizializzazione dell’applicazione.
Vediamo un semplice esempio di come configurare un’applicazione col metodo della memorizzazione sul database, useremo quindi l’implementazione di CDbAuthManager. Per effettuare questa configurazione apriamo il file di configurazione main.php della nostra applicazione, e aggiungiamo le seguenti direttive all’array di inizializzazione:
‘authManager’=>array(
‘class’=>’CDbAuthManager’,
‘connectionID’=>’db’,
),
Queste poche righe di codice permettono di stabilire che all’avvio dell’applicazione sarà caricato un nuovo componente dell’applicazione, chiamato appunto authManager, specifica il tipo di classe deve essere CDbAuthManager, e setta la proprietà di classe connectionID, deve essere il nostro componente di connessione al database. Fatto ciò noi all’interno dell’applicazione in qualsiasi punto di essa potremo puntare a tale componente ogni volta che nè avremo bisogno semplicemente usando la seguente istruzione PHP: Yii::app()->authManager.
Conclusioni
Anche oggi spero di essere riuscito a introdurvi semplicemente questo fondamentale aspetto comune all’autorizzazione applicativa basata sui ruoli applicativi, se desiderate avere maggiori dettagli relativamente all’implementazione di tale sistema potete contattarmi tramite mail a info@giovannimasucci.it.
Intanto vi auguro una buona giornata e vi ringrazio per l’attenzione, un saluto.