hook_permission Drupal 7 dozvole za pristup za različite uloge
U prethodnim lekcijama prikazivali smo stranice i blokove na različitim mestima, koristili smo svojstva 'access arguments', 'access callback' za postavljanje ograničenja pristupa stranicama. U ovoj lekciji ćemo napraviti mogućnost fleksibilnijeg uređivanja prava pristupa operacijama putem administratorskih stranica. Za to ćemo koristiti hook_permission() (u Drupalu 6 to je bio hook_perm()).
hook_permission()
Definiše dozvole za korisnike.
Ovaj hook može dodati dozvole koje vaš modul definiše, a koje se prikazuju na stranici dozvola korisnika. Takođe se koristi za potpun ili delimičan pristup akcijama koje modul izvodi.
Dozvole se proveravaju pomoću user_access().
Vraćene vrednosti
Niz čiji su ključevi imena dozvola, a vrednosti su nizovi sa sledećim parovima ključ-vrednost:
title: Čitljivo ime dozvole koje se prikazuje na stranici dozvola. Ova vrednost treba da bude obmotana funkcijom t() radi prevoda.
description: (opciono) Opis šta dozvola radi. Takođe treba biti obmotan funkcijom t() za prevod.
restrict access: (opciono) Boolean (true ili false) koji označava da treba ograničiti pristup ovoj dozvoli samo poverenim korisnicima. Koristi se da se spreče sigurnosni propusti. Kada je TRUE, standardna poruka o grešci će biti prikazana na stranici dozvola. Podrazumevano je FALSE.
warning: (opciono) Prikazuje prevedenu poruku upozorenja za ovu dozvolu na stranici administracije. Poseduje prioritet nad 'restrict access' i treba ga koristiti retko radi konzistentnosti prikaza poruka o bezbednosnim rizicima. Za dodatne informacije koristite description.
Dodajmo ovaj hook u kod iz prethodne lekcije:
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(); // inicijalizujemo niz menija $items['admin/config/content/page_example'] = array( // dodajemo stranicu na putanji 'admin/config/content/page_example' 'title' => 'Primer stranice', // naslov stranice 'description' => 'Obična stranica', // opis stranice 'page callback' => '_page_example', // funkcija koja vraća sadržaj stranice 'access arguments' => array('view page example'), // prava pristupa kao u hook_permission ); return $items; // vraćamo listu stranica } function _page_example($content = NULL) { $content = ''; // inicijalizujemo prazan sadržaj $query = db_select('node_revision', 'n'); // biramo tabelu node_revision u kojoj se nalaze trenutne revizije dokumenata $query->innerJoin('field_revision_body', 'b', 'b.revision_id = n.vid'); // pridružujemo tabelu field_revision_body gde je body $query->innerJoin('node', 'd', 'n.nid=d.nid'); // pridružujemo tabelu node gde je title noda $query->fields('n', array('title'), array('nid'), array('vid')); // biramo polja $query->fields('b', array('body_value')); $query->condition('d.type', 'news'); // filtriramo po tipu sadržaja $query->orderBy('n.timestamp', 'DESC'); // sortiramo po vremenu od najnovijih $query->range(0, 10); // biramo poslednjih 10 $result = $query->execute(); // izvršavamo upit while($nodes = $result->fetch()){ // obrađujemo rezultat $content .= '<h3>' . $nodes->title . '</h3>'; // prikazujemo naslov $content .= $nodes->body_value; // prikazujemo body } return $content; // vraćamo sadržaj }
Sada će na stranici dozvola admin/people/permissions biti prikazana nova dozvola:
Dozvolu dodeljujemo samo administratoru da obični korisnici ne bi mogli videti ovu stranicu. Sada, kada obični korisnik pokuša da pristupi stranici admin/config/content/page_example, Drupal će odbiti pristup sa greškom 403.
U sledećoj lekciji napravićemo administratorsku stranicu sa formom za izbor podešavanja sajta koristeći Drupal Forms API.