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.