Чим відрізняються аргументи доступу від зворотного дзвінка?


21

Чим відрізняються аргументи доступу від зворотного дзвінка?

Припустимо, я встановив зворотний виклик доступу 'user_access'та array('custom permission')є значенням для аргументів доступу.

Що це означає? Як вони впливають один на одного?

Відповіді:


27

"Зворотний дзвінок доступу" - це функція, яка викликається для того, щоб перевірити, чи має користувач доступ до сторінки. Як особливий випадок, це може бути цінністю 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.


дивовижне пояснення. У моїй вимозі якась спеціальна кнопка каже "голосувати зараз", повинна оброблятися лише автентифікованим користувачем, але кнопка повинна показуватися і анонімному, і коли анонімний користувач натискає, що він повинен переспрямувати на сторінку входу, і процес триває. Для цього конкретного сценарію існує спеціальна умова доступу, щоб показати кнопку анонімним ?. Коментуючи тут, оскільки це зробить цю публікацію більш повною вікі. Закладка .. :)
kiranking

4

Зворотний виклик доступу - це функція, яка вивчає наявність у користувача певних дозволів. Зворотний виклик доступу за замовчуванням - user_access ()

Аргументи доступу містять перелік дозволів, які перевіряються шляхом зворотного дзвінка. наприклад, "доступ до вмісту"


Для чого ще може бути цінність access callback? Якби це було не що інше user_access(), чи не усунуло б це потреби access arguments?
user1359

2
Що б ти не хотів. Будь-яка функція, яка повертає правду чи помилково.
Бердір

Тоді тобі не знадобиться access arguments?
user1359

Так, ви можете пропустити це
Shoaib Nawaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.