Как программно назначать разрешения для ролей?

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

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

Интересно, могу ли я как-то посмотреть роли с их именем (строкой), получить идентификатор роли и затем назначить разрешение. Он просто не чувствует себя хорошо.

24 голоса | спросил vogelsang 31 Jpm1000000pmTue, 31 Jan 2012 21:06:52 +040012 2012, 21:06:52

3 ответа


2

Возможности модуля делают это довольно красиво, позволяя вам экспортировать роли и разрешения (и множество других вещей) одним махом:

http://drupal.org/project/features

Но если вы хотите просмотреть свой собственный API-интерфейсы разрешений:

http://drupal.org/project/permissions_api

ответил krlucas 31 Jpm1000000pmTue, 31 Jan 2012 23:49:48 +040012 2012, 23:49:48
22

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

При создании новой роли пользователя с user_role_save() , он обновит объект, который вы передали, с новым идентификатором роли пользователя, который был назначен. Вы можете увидеть пример этого в standard_install() в стандартном установочном профиле.

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

В этом примере показано, что вы можете создать новую пользовательскую роль, а затем получить доступ к свойству rid, которое было заполнено с помощью user_role_save(). Он также показывает, как добавить разрешения для этой роли с помощью user_role_grant_permissions(). В этом случае он предоставляет роли «администратора» все доступные разрешения.

Если вам нужно получить идентификатор роли пользователя, созданной кем-то еще, вы можете использовать user_role_load_by_name() , чтобы получить объект для этой роли пользователя. Затем вы просто захватываете идентификатор с помощью $role->rid.

ответил Chaulky 11 Jam1000000amFri, 11 Jan 2013 05:39:44 +040013 2013, 05:39:44
15

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

Вы можете посмотреть роли с их именем, получить идентификатор роли и затем назначить разрешения следующим образом (например, в реализации hook_update):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
ответил batigolix 15 TueEurope/Moscow2015-12-15T23:43:25+03:00Europe/Moscow12bEurope/MoscowTue, 15 Dec 2015 23:43:25 +0300 2015, 23:43:25

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

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

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