logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

hook_permission Drupal 7 — permessi di accesso per diversi ruoli

14/10/2025, by Ivan

Nelle lezioni precedenti abbiamo visualizzato pagine e blocchi in diverse posizioni e abbiamo anche utilizzato le proprietà "access arguments" e "access callback" per impostare restrizioni di accesso alle pagine. In questa lezione creeremo la possibilità di modificare in modo più flessibile i diritti di accesso alle operazioni tramite le pagine di amministrazione. Per farlo, utilizzeremo hook_permission() (in Drupal 6 era hook_perm()).

hook_permission()

Definisce i permessi per gli utenti.

Questo hook può aggiungere permessi, in modo che il modulo possa determinare quali di essi sono selezionati nella pagina dei permessi degli utenti. Inoltre, l’hook viene utilizzato per il controllo completo o parziale dell’accesso alle azioni (actions) eseguite dal modulo.

I permessi vengono verificati utilizzando user_access().

Valori restituiti

Un array i cui chiavi sono i nomi dei permessi e i valori corrispondenti sono array contenenti le seguenti coppie chiave-valore:

title: Nome leggibile del permesso, mostrato nella pagina dei permessi. Questo valore deve essere racchiuso nella funzione t() per consentirne la traduzione in altre lingue.

description: (opzionale) Descrizione di ciò che fa il permesso. Anch’essa deve essere racchiusa nella funzione t() per la traduzione.

restrict access: (opzionale) Booleano (0 o 1, true o false) che può essere impostato su TRUE per indicare che l’amministratore del sito dovrebbe limitare l’uso di questo permesso solo a utenti fidati. Questa proprietà dovrebbe essere utilizzata per i permessi che, se concessi in modo improprio, potrebbero costituire una vulnerabilità di sicurezza (ad esempio “Gestione dei filtri di input” e “Controllo completo sui nodi” forniti dal core di Drupal). Quando impostato su TRUE, il messaggio di errore standard definito in user_admin_permissions() verrà mostrato tramite theme_user_permission_description() e sarà associato al permesso mostrato nella pagina di amministrazione. Il valore predefinito di restrict access è FALSE.

warning: (opzionale) Visualizza un messaggio di errore traducibile per questo permesso nella pagina di amministrazione. Questa proprietà sovrascrive il messaggio di errore automatico generato tramite restrict access se impostato su TRUE. Questa proprietà dovrebbe essere utilizzata raramente, solo per rendere tutti i permessi coerenti e comprensibili, e simili ad altri messaggi di sicurezza. Usa description per aggiungere informazioni che definiscono il permesso.

Aggiungiamo ora questo hook al codice della lezione precedente:

function sitemade_permission(){     
   return array('view page example'
    => array(
      'title' => t('View page example'),
      'description' => t('View simple page example'),
    ),
   ); 
 }
function sitemade_menu(){
        $items = array(); // inizializziamo l'array dei nostri elementi di menu    
        $items['admin/config/content/page_example'] = array(  // aggiungiamo una pagina con il percorso 'admin/config/content/page_example'
          'title' => 'Esempio di pagina', // titolo della pagina
          'description' => 'Pagina semplice', // descrizione della pagina
          'page callback' => '_page_example', // funzione che restituisce il contenuto della pagina
          'access arguments' => array('view page example'), // impostiamo i diritti di accesso come in hook_permission
      );    
        return $items; // restituiamo l'elenco delle pagine
    }
 
    function _page_example($content = NULL) {
        $content = ''; // inizializziamo la variabile del contenuto vuoto
        $query = db_select('node_revision', 'n'); // selezioniamo la tabella node_revision che contiene la revisione corrente del documento
        $query->innerJoin('field_revision_body', 'b', 'b.revision_id = n.vid'); // uniamo la tabella field_revision_body che contiene il body
        $query->innerJoin('node', 'd', 'n.nid=d.nid'); // uniamo la tabella node che contiene il titolo del nodo
        $query->fields('n', array('title'), array('nid'), array('vid')); // selezioniamo i campi
        $query->fields('b', array('body_value'));
        $query->condition('d.type', 'news'); // impostiamo una condizione per il tipo di contenuto
        $query->orderBy('n.timestamp', 'DESC'); // ordiniamo per data, prima le notizie più recenti
        $query->range(0, 10); // selezioniamo solo le ultime 10
        $result = $query->execute(); // eseguiamo la query sul database
        while($nodes = $result->fetch()){ // elaboriamo il risultato
            $content .= '<h3>' . $nodes->title . '</h3>'; // visualizziamo il titolo
            $content .= $nodes->body_value; // visualizziamo il body
        }
        return $content; // restituiamo il contenuto
    }

Ora nella pagina dei permessi admin/people/permissions apparirà un nuovo permesso:

Drupal add permission

Impostiamo il permesso solo per l’amministratore, in modo che gli utenti normali non possano visualizzare questa pagina. Ora, accedendo alla pagina admin/config/content/page_example, Drupal negherà l’accesso agli utenti comuni con un errore 403.

Nella prossima lezione creeremo una pagina di amministrazione con un modulo per la selezione delle impostazioni del nostro sito utilizzando le Drupal Forms API.