Як я можу дізнатися список доступних значень $ string для функції user_access ($ string)?


27

user_access ($ string, $ account = NULL)

$ string: Дозвіл, наприклад "адміністративні вузли", перевіряється на.

Як я можу дізнатися список доступних значень $ string для user_access()функції?

Відповіді:


12

Поки кожен модуль може визначати власні дозволи, не існує "суворого" списку цих рядків. Вам потрібно буде "сконструювати" його, якщо вам дійсно потрібно мати такий список програмно.

Цей сценарій можна запустити на сторінці / 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);
  }
}

26

Як сказав @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;
}

9

Ось версія 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);
  }
}

6

Ви можете використовувати user_permission_get_modules()функцію, яка повертає масив усіх визначених дозволів та їх модулів.

Визначте модулі, до яких належать дозволи.

Повернене значення

Асоціативний масив у форматі $звод => $ модуль.


2
Якщо ви загорнете його, array_keys()ви, очевидно, отримаєте лише запитувану інформацію. Ви можете також використовувати результат user_role_grant_permissions, наприклад , з метою надання ролі адміністратора всіх дозволів:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));
aross

4

Найпростіший спосіб - це перевірити сторінку дозволів (D7: адміністратор / люди / дозволи, D6: адміністратор / користувач / дозволи). Зауважте, що ви безпосередньо використовуєте відображений рядок у Drupal 6, для 7 потрібно ознайомитися з назвою / значенням прапорця. Це тому, що в дозволах зараз є перекладена назва та опис у Drupal 7.

Отже, якщо ви хочете, щоб ім'я дозволу "Переглянути опублікований вміст" в Drupal 7, значення - "доступ до вмісту", який є вашим ім'ям дозволу.

Якщо ви знаєте, з якого модуля надходить дозвіл, ви також можете перевірити відповідну реалізацію цього модуля mower_perm () (D6) / kuka_pemission () (D7).

У багатьох випадках ви хочете визначити власні пемісії та використовувати їх, ви можете зробити це за допомогою вищевказаних гачків.


RE: "Найпростіший спосіб - це перевірити сторінку дозволів (D7: admin / people / permissions,).". На сторінці показаний перелік дозволів, але вони є людським читабельним рядком, а не машиночитаним рядком.
gilzero

1
Як я писав нижче, машиночитабельне ім'я може бути витягнуте зі значення будь-якого з прапорців для даного дозволу.
Бердір

Ця відповідь стосується Drupal 6 і 7, один прийнятий лише Drupal 6 - але прийнята відповідь є акуратною хитрістю і її можна легко змінити для Drupal 7. =)
Грег,

4

Використання модуля Devel

  • Після встановлення та включення модуля Devel перейдіть до пунктуadmin/config/development/devel . Існує налаштування під назвою "Відображення назв машин дозволів та модулів". Будьте впевнені, що це встановлено.

  • Тепер, на сторінці дозволів people/permissions, наведіть курсор миші на назву дозволу, який ви допитуєте. Це може затримати секунду або дві, але тоді буде показано значення рядка.


Нічого собі, я про це не знав. Побачила це після того, як я опублікувала свою відповідь. Спасибі!
Batandwa

Дуже корисний! TYVM.
DrCord

Солодке, набагато простіше, ніж відкрити код модуля!
bloke_zero

1

Ось проста зміна форми, яка додасть ключ дозволу до імені на сторінці дозволів. Це повинно полегшити пошук. Вам потрібно буде додати його до спеціального модуля та замінити "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 . ')';
    }
  }
}

1

Я створив цей фрагмент 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>");
});

А завдяки сервісу Bookmarkify.it ви можете знайти тут закладки .
Batandwa

Це дійсно корисний інструмент, ти!
DrCord



0

просто впустіть якийсь модуль, ви побачите машинні дозволи на / 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>)'; 
    }
}

з повагою

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.