Drupal code: gestione dei permessi #1

Riprendo in mano questo “vecchio” blog, uno spazio in cui lasciare qualche appunto.
Volevo proporre una serie di articoli sulla gestione dei permessi in Drupal.

Mi riferisco alla gestione tramite moduli custom, che estendano le funzionalità di default.
Do per scontato che sappiate cosa sia un modulo, cosa siano le API, cosa sia un hook etc.
Se non lo sapete vi consiglio di partire da qui 🙂

hook_permission

Iniziamo dalla descrizione dell’hook_permission: è l’hook che ci permette di definire un nuovo permesso che potremo poi associare ai ruoli della nostra installazione dalla normale gestione dei permessi.
Per analizzare questo hook e altri di cui parlerò in seguito proverò a sviluppare un piccolo modulo che permette di visualizzare i contenuti non pubblicati (di default Drupal permette di visualizzare tali contenuti solo agli autori dei contenuti stessi).
Esiste il modulo View unpublished, che funziona in modo diverso rispetto a quanto farò io, prendetelo come un esercizio 🙂

Ecco un esempio di hook_permission che poi commenterò:


function mymodule_permission() {
  return array(
    'view unpublished nodes' => array(
      'title' => t('View unpublished nodes'),
      'description' => t('Let users to see all unpublished nodes.'),
    ),
  );
}

L’hook in questione definisce un nuovo permesso identificato dalla stringa view unpublished node, a cui viene aggiunto un titolo e una descrizione (anticipati dalla funzione t(), per l’implementazione delle traduzioni).
La stringa di identificazione è molto importante perché è l’identificatore unico del permesso, viene quindi usato come chiave per il controllo dei permessi.

Ovviamente nello stesso hook si possono creare diversi permessi semplicemente aggiungendo altre chiavi all’array.

Nella pagina dei permessi il nuovo permesso sarà categorizzato con il nome del modulo (nel mio caso My Module).

user_access

L’aver creato questo permesso ovviamente non modifica niente nella nostra applicazione, ci serve per ora solo a introdurre la funzione user_access che serve appunto a verificare l’associazione tra un utente e un permesso:


global $user;
user_access('view unpublished nodes', $user);

Con la prima funzione carichiamo l’oggetto $user, variabile globale coi dati dell’utente che naviga nel sito, mentre con la seconda verifichiamo che l’utente abbia il permesso da noi definito (o meglio: verifica che $user abbia uno dei ruoli a cui abbiamo associato il nostro permesso).

La funzione restituisce TRUE se il permesso è presente ed è ovviamente utilizzabile con qualsiasi oggetto $user caricato nel modulo.

In questo modo siamo in grado di verificare se l’utente che naviga nel sito ha il permesso da noi definito. Nei prossimi articoli verificheremo come utilizzare questa funzione per allargare, integrare o modificare il sistema di default dei permessi.

Importante: intervenire sui permessi è un’operazione delicata che può compromettere la sicurezza di un’applicazione, bisogna stare molto attenti a cosa si fa.

Alla prossima.

Annunci