Как узнать список доступных $ строковых значений для функции user_access ($ string)?

  

user_access ($ string, $ account = NULL)

     

$ string: разрешено, например, «администрировать узлы».

Как узнать список доступных $ строковых значений для функции user_access () ?

26 голосов | спросил gilzero 26 AMpTue, 26 Apr 2011 11:15:38 +040015Tuesday 2011, 11:15:38

11 ответов


12

Пока каждый модуль может определять свои собственные разрешения, нет строкового списка этих строк. Вам нужно будет «сконструировать» его, если вам действительно нужно иметь такой список программным путем.

Вы можете запустить этот скрипт на странице /devel /php. (Конечно, вам нужен модуль Devel .)

  //Рендеринг роли /разрешения:
$ options = array ();
foreach (module_list (FALSE, FALSE, TRUE) как $ module) {
  print_r ($ модуль);
  //Drupal 6
  //if ($ permissions = module_invoke ($ module, 'perm')) {
  //print_r ($ permissions);
  //}

  //Drupal 7
  if ($ permissions = module_invoke ($ module, 'permission')) {
    print_r ($ разрешений);
  }
}
 
ответил Haza 26 AMpTue, 26 Apr 2011 11:40:47 +040040Tuesday 2011, 11:40:47
25

Как сказал @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 (
        «обратный вызов доступа» => 'User_access',
        'access arguments' => array («создать контент купона»),
    );
    return $ items;
}
 
ответил Citricguy 1 FebruaryEurope/MoscowbWed, 01 Feb 2012 04:54:58 +0400000000amWed, 01 Feb 2012 04:54:58 +040012 2012, 04:54:58
9

Вот версия ответа Haza D7, измененная для использования DSM вместо print_r и для исключения модулей, которые не реализуют hook_permission:

  //Обзор рендеринга:
$ options = array ();
foreach (module_list (FALSE, FALSE, TRUE) как $ module) {
  if ($ permissions = module_invoke ($ module, 'permission')) {
    //Список только модулей, имеющих разрешения.
    ДСМ ($ модуль);
    ($ DSM разрешения);
  }
}
 
ответил fureigh 4 Jpm1000000pmWed, 04 Jan 2012 21:53:23 +040012 2012, 21:53:23
6

Вы можете использовать user_permission_get_modules ( ) , которая возвращает массив всех определенных разрешений и их модулей.

  

Определите модули, к которым относятся разрешения.

     

Возвращаемое значение

     

Ассоциативный массив в формате $ permission => $ Модуля.

ответил Елин Й. 7 PMpMon, 07 Apr 2014 17:05:38 +040005Monday 2014, 17:05:38
4

Самый простой способ - проверить страницу разрешений (D7: admin /people /permissions, D6: admin /user /permissions). Обратите внимание, что вы непосредственно используете отображаемую строку в Drupal 6, для 7 вам нужно посмотреть имя /значение флажка. Это связано с тем, что теперь у разрешений есть переведенное название и описание в Drupal 7.

Итак, если вы хотите, чтобы имя для разрешения «Просмотр опубликованного контента» в Drupal 7, это значение «content content», которое является вашим именем разрешения.

Если вы знаете, из какого модуля поступает разрешение, вы также можете проверить соответствующий hook_perm () (D6) / hook_pemission () (D7) этого модуля.

Во многих случаях вы хотите определить свои собственные ошибки и использовать их, вы можете сделать это с помощью указанных выше крючков.

ответил Berdir 26 AMpTue, 26 Apr 2011 11:32:57 +040032Tuesday 2011, 11:32:57
4

Использование модуля Devel

  • После установки и включения модуля Devel перейдите к admin /config /development /devel . Существует настройка под названием «Отображать имена машин для разрешений и модулей». Убедитесь, что этот флажок установлен.

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

ответил mlanning 12 Mayam14 2014, 04:49:17
1

Вот простой вид формы, который добавит ключ разрешения к имени на странице разрешений. Это должно облегчить поиск. Вам нужно будет добавить его в пользовательский модуль и заменить «mymodule» на имя этого модуля.

  /**
 * Реализует hook_form_FORM_ID_alter ().
 * /
function mymodule_form_user_admin_permissions_alter (& form $ form, $ form_state) {
  foreach ($ form ['permission'] как $ key => & amp; $ item) {
    if (isset ($ item ['# type']) & amp; & amp; $ item ['# type'] == 'item') {
      $ item ['# markup']. = '('. $ key. ')';
    }
  }
}
 
ответил Randall Knutson 11 PMpFri, 11 Apr 2014 19:27:30 +040027Friday 2014, 19:27:30
1

Я создал этот фрагмент кода JavaScript , который помогает мне в этом. Я тестировал его на Drupal 7 только на блестящей теме .

Он в основном выводит имя машины, взятое из первого флажка с этим именем, в первую ячейку под меткой. Сценарий основан на jQuery, который не должен быть проблемой для Drupal 7.

Я обычно вставляю его в консоль Developer Tools и запускаю его оттуда. Я мог бы создать в нем букмарклет в будущем.

  //Пройдите через каждую из строк в таблице permissin
rows = jQuery ('# permissions tr');
rows.each (function () {
    //Получить первый флажок в строке.
    checkbox = jQuery ('. checkbox .form-checkbox', this) .first ();
    //Получить первую ячейку, содержащую метку разрешения.
    nameCell = jQuery ('td: first-child', this);
    //Если это не строка разрешений
    if (checkbox.length == 0) {
        вернуть;
    }

    //Вставьте имя обработки разрешения в ячейке метки разрешений.
    nameCell.append ("<div> <code>" + checkbox.val () + "</code> </div>");
});
 
ответил Batandwa 21 J0000006Europe/Moscow 2014, 16:44:36
1
  db_query ("SELECT DISTINCT {разрешение} FROM role_permission");
 
ответил emallove 25 Mayam16 2016, 00:40:33
1

Это простой модуль, облегчающий: Список аргументов доступа

С уважением

ответил Bilal 7 Jpm1000000pmSun, 07 Jan 2018 12:44:49 +030018 2018, 12:44:49
0

просто отпустите в каком-то модуле, вы увидите разрешения на машину в /admin /people /permissions

  функция YOURMODULE_form_user_admin_permissions_alter (& форма $, & amp; $ form_state)
{
    $ perms = & amp; $ form ['permission'];

    $ group_counter = 0;
    foreach ($ perms as $ k => & amp; $ v) {
        if ($ k == $ group_counter) {//пропускает поля
            $ Group_counter ++;
            Продолжать;
        }

        $ v ['# markup']. = '(<span class = "description" style = "color: brown">'. $ k. '</span>)';
    }
}
 

рассматривает

ответил Yurii K. 21 PMpThu, 21 Apr 2016 14:36:54 +030036Thursday 2016, 14:36:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132