ertttert
Books-CMS.clan.su

Управление доступом

Во всех приведенных выше примерах мы просто заносили в ключ access callback элемента меню значение TRUE, а это означает, что к данному элементу может обратиться любой пользователь. Обычно управление доступом к меню осуществляется за счет определения прав доступа в модуле с помощью функции hook_permission() и последующей проверки этих прав. Имя необходимой для этого функции определено в ключе access callback и обычно выглядит как user_access. Определим право доступа с именем receive greeting; если у пользователя нет роли с этим правом, то при попытке перехода по адресу http://example.com/?q=menufun он получит сообщение Access denied (Доступ запрещен).
/**
* Реализация hook_permission()
*/
function menufun_permission() {
 return array(
 'receive greeting' => array(
 'title' => t('Receive a greeting'),
 'description' => t('Allow users receive a greeting message'),
 ),
 );
}

/**
* Реализация hook_menu().
*/
function menufun_menu() {
 $items['menufun'] = array(
 'title' => 'Menu Fun',
 'page callback' => 'menufun_greeting',
 'file' => 'menufun_greeting.inc',
 'page arguments' => array('Jane', 'Doe'),
 'access callback' => 'user_access',
 'access arguments' => array('receive greeting'),
 'type' => MENU_NORMAL_ITEM,
 'weight' => '-1',
);

 $items['menufun/farewell'] = array(
 'title' => 'Farewell',
 'page callback' => 'menufun_farewell',
 'file' => 'menufun_greeting.inc',
 'access callback' => 'user_access',
 'access arguments' => array('receive greeting'),
 'type' => MENU_NORMAL_ITEM,
 );
 return $items;
}
В этом коде право доступа определяется с помощью вызова user_access('receive greeting'). Здесь система меню работает в качестве стража, определяя на основе пользовательской роли, к каким путям разрешено обращаться, а к каким нет.
Совет. Функция user_access() является стандартным обратным вызовом доступа. Если не определить обратный вызов доступа, то система меню передаст аргументы доступа функции user_access().
Дочерние элементы меню не наследуют обратные вызовы доступа и аргументы доступа от своих родителей. Ключ access arguments должен быть определен для каждого элемента меню. Ключ access callback нужно определять, только если он отличается от user_access. Исключе нием является любой элемент меню типа MENU_DEFAULT_LOCAL_TASK, который наследует родительские ключи access callback и access arguments, хотя для ясности лучше явно определять и эти ключи даже для стандартных локальных задач.
Всего комментариев: 0
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz