Відповіді:
"Зворотний дзвінок доступу" - це функція, яка викликається для того, щоб перевірити, чи має користувач доступ до сторінки. Як особливий випадок, це може бути цінністю TRUE
, і в цьому випадку всі користувачі мали б доступ до нього; Іншими словами, дозвіл на доступ було б обійти.
У випадку, якщо ви використовуєте ім'я функції для значення "зворотного виклику доступу" (за замовчуванням це "user_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
?