#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
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;
}