3.6. Permessi

Introduzione

Il sistema di permessi di Zikula è una delle componenti più importanti e utili del framework. Grazie ad esso è possibile suddividere i ruoli di amministrazione e stabilire chi può far cosa. Ad esempio potete rendere la vostra galleria di immagini visibile solo agli utenti registrati o permette solo agli utenti del gruppo redattori, da voi appena creato, di inviare articoli. Flessibilità e potenza sono le chiavi di questo sistema.

Di contro il sistema dei permessi può sembrare un po' ostico inizialmente (proprio per questo si prevede un restyling per la versione 2.0), ma un utente smaliziato non impiegherà molto tempo a padroneggiare anche questo strumento.

L'interfaccia di amministrazione

Il modulo Permessi ha un interfaccia di amministrazione (nella scheda Utenti/Users) che permette di creare nuove regole e modificare o eliminare quelle già esistenti. Tutte queste azioni vengono fatte utilizzando ajax, potete infatti ad esempio cambiare l'ordine delle regole semplicemente trascinandole.

Nota: la regola principale (quella che da permessi di amministrazione all'admin) è bloccata. Se volete modificarla (fatelo solo se siete sicuri di aver capito a fondo la logica dei permessi!) dovete prima sbloccarla nelle Impostazioni del modulo.

Il modulo dei permessi lavora in coppia con il modulo Gruppi e non può funzionare senza di esso. Tutti i permessi infatti sono relativi ai gruppi e non è possibile impostare il permesso per un singolo utente

Vediamo ora qual è la logica della tabella dei permessi.

Struttura base

Il sistema di permessi si basa su 4 fattori: Gruppo, Componente, Istanza e Livello.

  • gruppi: definisce gli utenti a cui questa regola si applica;
  • componente: è "l'area" a cui questa regola fa riferimento. Normalmente è un modulo, ma può essere ad esempio anche un blocco;
  • istanza: l'istanza rappresenta l'elemento specifico a cui la regola si applica;
  • livello: il permesso da applicare;

La differenza tra componente e istanza dovrebbe esservi chiara alla fine di questo articolo, mentre le possibili combinazioni di componenti e istanze le potete vedere semplicemente cliccando, nel modulo Permessi, sulle voci Istanza o Componente nella testata della tabella. Vi si aprirà un pop-up mostrando tutte le combinazioni conosciute. Questo è particolarmente utile quando userete un modulo nuovo in quanto dovrete semplicemente copiare il componente e sostituire nell'istanza il valore necessario (es. al posto di Author ID mettere l'id dell'utente).

Attenzione: il componente e il nome del modulo non sono legati. Normalmente la componente è il nome inglese del modulo ma non sempre (ad esempio il modulo Notizie / News ha Stories:: come componente), l'unico modo per saperlo è controllare l'elenco delle componenti o il file pnversion.php del modulo. Tradurre il modulo o cambiargli nome non modificherà il componente.

Questa è la copia della tabella di permessi di default dopo un'installazione da zero di Zikula:


Gruppo Componente Instanza Livello
1 Amministratori .* .* Amministra
2 Tutti i gruppi
ExtendedMenublock:: 1:2: Nessuno
3 Utenti .* .* Commenta
4 Non registrati
ExtendedMenublock:: 1:(1|3): Nessuno
5 Non registrati
.* .* Leggi

Le regole superiori hanno la precedenza. Questo significa che eventuali conflitti (2 regole che affermano cose diverse) vengono risolti dando la precedenza a quella più in alto. Può essere utile leggere la tabella dal basso verso l'alto, altrimenti alcuni passaggi potrebbero essere difficili da capire (soprattutto quando le regole sono tante).

Analizziamo ora il significato delle 5 regole di cui sopra, procedendo dal basso verso l'alto:

5. Gli utenti non registrati hanno il diritto di lettura di tutte le pagine;
4. Gli utenti non registrati non hanno nessun diritto (neanche lettura) sulle voci 1 (Il tuo account) e 3 (Log out) dell'ExtendedMenublock numero 1. Questa regola sovrascrive la precedente che dava accesso in lettura a tutto;
3. Gli utenti loggati hanno il diritto di commentare tutte le risorse (questo diritto comprende anche quello di lettura, quindi possono anche leggere tutto);
2. Gli utenti di tutti i gruppi non hanno alcun diritto (neanche lettura) della voce 2 (Amministrazione) dell'ExtendedMenublock numero 1;
1. I membri del gruppo Amministratori hanno i diritti di amministrazione su qualunque componente (questo sovrascrive la regola precedente che negava a tutti la visibilità del link del pannello di amministrazione);

Lette così non sono così difficili, no?

Accesso come amministratore ad un singolo modulo/componente

A questo punto dovrebbe essere chiaro che per dare accesso di amministrazione su un modulo agli utenti di un determinato gruppo è sufficiente creare la regola

Gruppo Componente Instanza Livello
Nuovo-Gruppo <componente> :: Amministra

dove <componente> è il nome del modulo (facendo attenzione alle lettere maiuscole e minuscole).

In questo modo i membri di quel gruppo andando su /admin.php vedranno il pannello di controllo con i moduli a cui hanno accesso (e solo quelli, tutti gli altri saranno nascosti). Fate attenzione a dove posizionate questa regola. Mettendola sotto alla regola numero 3 della precedente tabella i permessi si abbasserebbero a "commenta" in quanto il conflitto (l'utente è membro di entrambi i gruppi) verrebbe risolto dando la precedenza a quella più in alto.

Se desiderate rendere visibile il link di amministrazione allo stesso gruppo (visto che hanno i diritti su almeno un modulo) dovrete aggiungere questa regola:

Gruppo Componente Instanza Livello
Nuovo-Gruppo ExtendedMenublock:: 1:2: Commenta

sopra alla regola numero 2 della prima tabella (o ancora una volta il conflitto annullerà questa regola)!

Una cosa molto richiesta è di poter dare ad un nuovo gruppo i permessi di vedere tutto il sito, altrimenti vedranno veramente poco (salvo i membri di quel gruppo non siano anche membri di un altro gruppo, come quello Utenti, che gli dia i permessi necessari). La regola in questione è la seguente:

Gruppo Componente Instanza Livello
Nuovo-Gruppo .* .* Commenta

Alla fine la tabella dovrebbe essere simile a questa:


Gruppo Componente Instanza Livello
1 Amministratori .* .* Amministra
2 Nuovo-Gruppo (FAQ|Polls):: .* Amministra
3 Nuovo-Gruppo .* .* Commenta
4 Tutti i gruppi
ExtendedMenublock:: 1:2: Nessuno
5 Utenti .* .* Commenta
6 Non registrati
ExtendedMenublock:: 1:(1|3): Nessuno
7 Non registrati
.* .* Leggi

I membri del nuovo gruppo avranno quindi i permessi di commentare (e quindi leggere) tutte le sezioni e avranno accesso come amministratori ai moduli FAQ e Polls.

Un esempio pratico

Lo scopo di questo esempio è di mostrare cosa si può fare utilizzando a fondo il sistema di permessi di Zikula.

Ipoteticamente, abbiamo questi 3 menu:

  • Menu principale: contiene i link ai moduli pubblici;
  • Menu riservato ai membri: contiene i link ai moduli visibili solo ai membri;
  • Redattori: contiene i link ai moduli di cui i membri del gruppo Redattori sono amministratori;

Abbiamo inoltre altri 2 blocchi:

  • Immagini Random dalla Galleria: solo per i membri
  • Membri online: per tutti gli utenti

Questi sono i moduli pubblici: Members list, Weblinks e Downloads. Questi quelli privati: Gallery. E questi quelli del gruppo Redattori: News, Downloads

La tabella di permessi per ottenere questo risultato dovrebbe essere simile a questa:


Gruppo Componente Instanza Livello
1 Admins .* .* Amministra
2 Redattori Downloads:: .* Amministra
3 Redattori News .* Aggiungi
4 Redattori .* .* Commenta
5 Tutti i gruppi
ExtendedMenublock:: 1: Nessuno
6 Utenti .* .* Commenta
7 Non registrati
Gallery:: .* Nessuno
8 Non registrati Galleryblock:: Random Image:: Nessuno
9 Non registrati ExtendedMenublock:: 2: Nessuno
10 Non registrati .* .* Leggi