В чем разница между аргументами доступа и обратным вызовом доступа?

21

В чем разница между аргументами доступа и обратным вызовом доступа?

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

Что это значит? Как они влияют друг на друга?

user1359
источник

Ответы:

27

«Обратный вызов доступа» - это функция, которая вызывается для проверки доступа пользователя к странице. Как особый случай, это может быть значение 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.

киамалуно
источник
классное объяснение. По моему требованию некоторые пользовательские кнопки, скажем, «голосовать сейчас», должны обрабатываться только аутентифицированным пользователем, но кнопка должна быть показана анонимному пользователю, и когда анонимный пользователь нажимает, он должен перенаправить на страницу входа и процесс продолжается. Для этого конкретного сценария есть специальное условие доступа, чтобы показать кнопку анонимному пользователю? Комментируя здесь, потому что это сделало бы этот пост более полной вики. В закладки .. :)
kiranking
4

Обратный вызов доступа - это функция, которая проверяет, есть ли у какого-либо пользователя какие-либо разрешения. Обратный вызов доступа по умолчанию - user_access ()

Аргументы доступа содержат список разрешений, которые проверяются обратным вызовом доступа. например, «доступ к содержимому»

Шоаиб Наваз
источник
Что еще может быть ценностью для access callback? Если бы это было что-то иное user_access(), от этого избавилась бы необходимость access arguments?
user1359
2
Все, что ты пожелаешь. Любая функция, которая возвращает TRUE или FALSE.
Бердир
Так что тогда тебе не нужно access arguments?
user1359
Да, тогда вы можете пропустить это
Shoaib Nawaz