Допустимые аргументы доступа

#drupal #drupal-7

#drupal #drupal-7

Вопрос:

Как я могу найти допустимые аргументы доступа? Я посмотрел в menu_router, но я считаю, что это дает только некоторые из них.

 $items['admin/page'] = array(
   'access arguments' => array('access administration pages'),
  );
  

Ответ №1:

Вызывать hook_permission() во всех модулях:

 $permissions = module_invoke_all('permission');
  

Если я правильно помню array_keys($permissions) , то выдам вам список допустимых имен компьютеров разрешений. Метки / описания / другие настройки для каждого разрешения находятся в каждом отдельном элементе массива.

Комментарии:

1. Есть ли где-нибудь, что я могу посмотреть в базе данных?

2. Хороший вопрос, который я никогда раньше не смотрел! Похоже, что они не хранятся в БД в массовом порядке, скорее хранятся связи между ролями и разрешениями role_permission . Я предполагаю, что страница администратора разрешений вызывается module_invoke_all('permission') каждый раз при запуске и перестраивает role_permission таблицу при сохранении. Таким образом, все разрешения никогда не нужно сохранять, и Drupal может сделать вывод, что роль без записи разрешения в таблице не имеет доступа к странице / ресурсу

3. На самом деле имеет смысл подумать об этом, если бы все разрешения были сохранены, тогда Drupal пришлось бы удалить дублирование между списком, который он содержал в базе данных, и всеми списками, предоставляемыми модулями (которые могли измениться с момента последнего обновления БД)

Ответ №2:

На самом деле, вас интересуют значения аргументов access, где обратный вызов access равен «user_access» (значение по умолчанию); поскольку модуль может использовать другой обратный вызов access, значения аргументов access теоретически могут быть бесконечными.

Альтернативой вызову всех реализаций hook_permission() является использование кода, подобного следующему:

 $permissions = array();
db_query("SELECT permission FROM {role_permission}");

foreach ($result as $row) {
  $permissions[$row->permission] = TRUE;
}
  

array_keys($permissions) затем выдаст вам список всех разрешений.

Я взял запрос от user_role_permissions(); разница в том, что функция интересуется разрешениями, связанными с ролью, переданной в качестве аргумента.

Ответ №3:

1- Проверьте список допустимых разрешений по адресу: /admin/people/permissions

Drupal 7, список допустимых разрешений

2- Укажите разрешение в вашем меню:

 function webforms_advanced_router_menu() {

  $items['admin/config/mymodule'] = [
    'title' => 'MyModule',
    'page callback' => 'drupal_get_form',
    'access callback' => '_mymodule_admin_form',
    'access arguments' => array('administer site configuration'),
    'type' => MENU_CALLBACK
  ];

  return $items;
}