Ответы:
«Обратный вызов доступа» - это функция, которая вызывается для проверки доступа пользователя к странице. Как особый случай, это может быть значение TRUE
, и в этом случае все пользователи будут иметь к нему доступ; другими словами, разрешение на доступ будет обойдено.
В случае, если вы используете имя функции для значения «access callback» (по умолчанию это «user_access»), вы также можете использовать «access arguments», который представляет собой массив, содержащий аргументы, переданные функции обратного вызова access.
Как и в случае других обратных вызовов меню, аргументы должны быть строкой или числом; в случае, если это число, значение будет заменено значением, взятым из пути меню. Если вы хотите избежать этой замены, вместо числа вам нужно использовать строку; например, использование в "1"
качестве единицы для аргументов, переданных обратному вызову доступа, позволит избежать автоматической замены.
Вот некоторые примеры объявлений обратного вызова меню, используемых из основных модулей Drupal. (Примеры взяты из кода Drupal 7, но, как я хочу отметить, это не имеет никакого значения.)
Это пример, где обратным вызовом доступа является user_access () .
$items['file/progress'] = array(
'page callback' => 'file_ajax_progress',
'delivery callback' => 'ajax_deliver',
'access arguments' => array('access content'),
'theme callback' => 'ajax_base_page_theme',
'type' => MENU_CALLBACK,
);
Это пример, где обратный вызов доступа не является именем функции.
$items['user'] = array(
'title' => 'User account',
'title callback' => 'user_menu_title',
'page callback' => 'user_page',
'access callback' => TRUE,
'file' => 'user.pages.inc',
'weight' => -10,
'menu_name' => 'user-menu',
);
В этом случае обратным вызовом доступа является user_view_access (), которому передается не число 1, а значение, взятое из пути меню (в данном случае это «пользователь /% пользователь»); это частный случай, так как функция получит возвращаемое значение user_load()
.
$items['user/%user'] = array(
'title' => 'My account',
'title callback' => 'user_page_title',
'title arguments' => array(1),
'page callback' => 'user_view_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
// By assigning a different menu name, this item (and all registered child
// paths) are no longer considered as children of 'user'. When accessing the
// user account pages, the preferred menu link that is used to build the
// active trail (breadcrumb) will be found in this menu (unless there is
// more specific link), so the link to 'user' will not be in the breadcrumb.
'menu_name' => 'navigation',
);
Предположим, что предыдущее меню было определено следующим образом и вызвано путем, например, «пользователь / привет».
$items['user/%'] = array(
'title' => 'My account',
'title callback' => 'user_page_title',
'title arguments' => array(1),
'page callback' => 'user_view_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
// By assigning a different menu name, this item (and all registered child
// paths) are no longer considered as children of 'user'. When accessing the
// user account pages, the preferred menu link that is used to build the
// active trail (breadcrumb) will be found in this menu (unless there is
// more specific link), so the link to 'user' will not be in the breadcrumb.
'menu_name' => 'navigation',
);
В этом случае обратный вызов доступа получил бы в качестве аргумента значение, взятое из пути (0 означает «пользователь», а 1 означает часть после «пользователя» и косой черты); в этом случае это значение «привет».
Чтобы лучше понять эти аргументы с подстановочными знаками, см. Аргументы загрузчика с подстановочными знаками . Страница документации помечена Drupal 6, но то, что сообщается, все еще действует для Drupal 7.
Обратный вызов доступа - это функция, которая проверяет, есть ли у какого-либо пользователя какие-либо разрешения. Обратный вызов доступа по умолчанию - user_access ()
Аргументы доступа содержат список разрешений, которые проверяются обратным вызовом доступа. например, «доступ к содержимому»
access callback
? Если бы это было что-то иное user_access()
, от этого избавилась бы необходимость access arguments
?
access arguments
?