Відповіді:
Поки кожен модуль може визначати власні дозволи, не існує "суворого" списку цих рядків. Вам потрібно буде "сконструювати" його, якщо вам дійсно потрібно мати такий список програмно.
Цей сценарій можна запустити на сторінці / 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, найпростіший спосіб дізнатися, які дозволи доступні - це перейти до адміністраторів дозволів / людей / дозволів у Drupal 7.
Проблема, з якою я постійно стикався, полягає в тому, що я ніколи не міг зрозуміти, яку рядок мені потрібно надати як «аргумент доступу», щоб фактично використовувати дозвіл. Ну, ось як ви знайдете ім'я рядка для дозволів, які ви хочете використовувати (у цьому прикладі використовується Google Chrome.)
Крок перший. Перейдіть до адміністратора / люди / дозволи знайдіть дозвіл, який ви хочете використовувати, і натисніть правий прапорець праворуч від дозволу, який ви хочете використовувати. Виберіть "Перевірити елемент" або просто перегляньте джерело.
Далі знайдіть значення прапорця та відзначте значення. (У цьому випадку рядок "створити вміст купона")
Це рядок, який потрібно надати в якості аргументу доступу в mook_menu ()
Приклад коду: (видалено нерелевантні елементи, не забудьте заголовок, зворотний дзвінок тощо тощо) у куці_меню ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Ось версія D7 відповіді Хаза, модифікована для використання DSM замість print_r та для виходу з модулів, які не реалізують гак_пермісія:
// 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: адміністратор / люди / дозволи, D6: адміністратор / користувач / дозволи). Зауважте, що ви безпосередньо використовуєте відображений рядок у Drupal 6, для 7 потрібно ознайомитися з назвою / значенням прапорця. Це тому, що в дозволах зараз є перекладена назва та опис у Drupal 7.
Отже, якщо ви хочете, щоб ім'я дозволу "Переглянути опублікований вміст" в Drupal 7, значення - "доступ до вмісту", який є вашим ім'ям дозволу.
Якщо ви знаєте, з якого модуля надходить дозвіл, ви також можете перевірити відповідну реалізацію цього модуля mower_perm () (D6) / kuka_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 лише на блискучу тему .
В основному він виводить ім'я машини, взятого з першого прапорця цього імені, на першу клітинку під міткою. Сценарій спирається на jQuery, що не повинно бути проблемою для Drupal 7.
Зазвичай я вставляю його на консоль Інструменти для розробників і запускаю звідти. Я можу створити закладку для цього в майбутньому.
// 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>");
});
Це простий модуль для спрощення: Доступ до списку аргументів
З повагою
просто впустіть якийсь модуль, ви побачите машинні дозволи на / 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()));