Ответы:
Пока каждый модуль может определять свои собственные разрешения, нет «строгого» списка этих строк. Вам нужно будет «построить» его, если вам действительно нужен такой список программно.
Вы можете запустить этот скрипт на странице / devel / php. (Конечно, вам нужен модуль Devel .)
// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
print_r($module);
// Drupal 6
// if ($permissions = module_invoke($module, 'perm')) {
// print_r($permissions);
// }
// Drupal 7
if ($permissions = module_invoke($module, 'permission')) {
print_r($permissions);
}
}
Как сказал @Berdir, самый простой способ узнать, какие разрешения доступны, - это перейти к разрешениям admin / people / permissions в Drupal 7.
Проблема, с которой я продолжал сталкиваться, заключается в том, что я никогда не мог понять, какую строку мне нужно было предоставить в качестве «аргумента доступа», чтобы фактически использовать разрешение. Итак, вот как вы можете найти имя строки для разрешений, которые вы хотите использовать (в этом примере используется Google Chrome.)
Первый шаг. Перейдите к admin / people / permissions, найдите разрешение, которое вы хотели бы использовать, и щелкните правой кнопкой мыши по флажку справа от разрешения, которое вы хотите использовать. Выберите «Проверить элемент» или просто посмотрите на источник.
Затем найдите значение флажка и запишите это значение. (В этом случае строка «создать содержимое купона»)
Это строка, которую вы должны предоставить в качестве аргумента доступа в hook_menu ()
Пример кода: (не релевантные элементы удалены, не забудьте заголовок, обратный вызов и т. Д. В hook_menu ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Вот версия ответа Haza для D7, модифицированная для использования DSM вместо print_r и для исключения модулей, которые не реализуют hook_permission:
// Render permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
if ($permissions = module_invoke($module, 'permission')) {
// List only the modules that have permissions.
dsm($module);
dsm($permissions);
}
}
Вы можете использовать user_permission_get_modules()
функцию, которая возвращает массив всех определенных разрешений и их модулей.
Определите модули, которым принадлежат разрешения.
Возвращаемое значение
Ассоциативный массив в формате $ Права => $ Модуль.
Самый простой способ - проверить страницу разрешений (D7: admin / people / permissions, D6: admin / user / permissions). Обратите внимание, что вы напрямую используете отображаемую строку в Drupal 6, для 7 вам нужно взглянуть на имя / значение флажка. Это связано с тем, что разрешения теперь имеют переведенный заголовок и описание в Drupal 7.
Поэтому, если вы хотите указать имя для разрешения «Просмотр опубликованного контента» в Drupal 7, значение «access content» - это имя вашего разрешения.
Если вы знаете, от какого модуля исходит разрешение, вы также можете проверить соответствующую реализацию hook_perm () (D6) / hook_pemission () (D7) этого модуля.
Во многих случаях вы хотите определить свои собственные разрешения и использовать их, вы можете сделать это с помощью описанных выше хуков.
Использование модуля Devel
После установки и включения модуля Devel перейдите к admin/config/development/devel
. Существует настройка под названием «Отображать имена компьютеров для разрешений и модулей». Будьте уверены, что проверено.
Теперь на странице разрешений people/permissions
наведите указатель мыши на название разрешения, которое вы запрашиваете. Это может задержать секунду или две, но тогда появится строковое значение.
Вот простое изменение формы, которое добавит ключ доступа к имени на странице разрешений. Это должно облегчить поиск. Вам нужно будет добавить его в пользовательский модуль и заменить «mymodule» на имя этого модуля.
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_user_admin_permissions_alter(&$form, $form_state) {
foreach ($form['permission'] as $key => &$item) {
if (isset($item['#type']) && $item['#type'] == 'item') {
$item['#markup'] .= ' (' . $key . ')';
}
}
}
Я создал этот фрагмент JavaScript, который помогает мне в этом. Я тестировал его в Drupal 7 только на тему Shiny .
Он в основном выводит имя машины, взятое из первого флажка этого имени, в первую ячейку под меткой. Скрипт опирается на jQuery, что не должно быть проблемой в Drupal 7.
Обычно я вставляю его в консоль Developer Tools и запускаю оттуда. Я мог бы создать букмарклет для этого в будущем.
// Go through each of the rows on the permissin table
rows = jQuery('#permissions tr');
rows.each(function() {
// Get the first checkbox in the row.
checkbox = jQuery('.checkbox .form-checkbox', this).first();
// Get the first cell, containing the permission label.
nameCell = jQuery('td:first-child', this);
// In case this is not a permission row
if(checkbox.length == 0) {
return;
}
// Embed the permission maching name on permission label cell.
nameCell.append("<div><code>" + checkbox.val() + "</code></div>");
});
Это простой модуль для упрощения: Access Arguments List
С уважением
просто загляните в какой-нибудь модуль, вы увидите права доступа к машине в / admin / people / permissions
function YOURMODULE_form_user_admin_permissions_alter(&$form, &$form_state)
{
$perms = &$form['permission'];
$group_counter = 0;
foreach ($perms as $k => &$v) {
if ($k == $group_counter) { // skip fieldsets
$group_counter++;
continue;
}
$v['#markup'] .= ' (<span class="description" style="color:brown">'.$k.'</span>)';
}
}
С уважением
array_keys()
вы, очевидно, получите только запрошенную информацию. Вы можете также использовать результатuser_role_grant_permissions
, например , с целью предоставление роли администратора всех разрешений:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));