У меня есть некоторые разрешения, которые я хотел бы назначить некоторым ролям программно для упрощения установки.
Поскольку я устанавливаю модуль и создаю разрешения и роли, у меня нет идентификаторов ролей, в которых я хочу установить разрешения. До сих пор я нашел только программные способы назначения ролей , для которых требуется идентификатор роли.
Интересно, смогу ли я как-нибудь найти роли по их имени (строке), получить идентификатор роли и назначить разрешение. Это просто не правильно.
Ответы:
Модуль функций делает это довольно хорошо, позволяя вам экспортировать роли и разрешения (и множество других вещей) одним махом:
http://drupal.org/project/features
Но если вы хотите развернуть свой собственный API-интерфейс Permissions:
http://drupal.org/project/permissions_api
источник
Особенности довольно удобны для таких вещей, как это. Однако, если вам нужно создавать роли и добавлять разрешения программно, вам не нужно копаться в базе данных самостоятельно.
Когда вы создаете новую пользовательскую роль с помощью
user_role_save()
, она обновит переданный вами объект новым назначенным идентификатором роли пользователя. Вы можете увидеть пример этого вstandard_install()
функции в стандартном профиле установки.Этот пример показывает, что вы можете создать новую роль пользователя, а затем получить доступ к ее
rid
свойству, которое было заполненоuser_role_save()
. Также показано, как добавить разрешения для этой роли с помощьюuser_role_grant_permissions()
. В этом случае он предоставляет роли «администратор» все доступные разрешения.Если вам нужно получить идентификатор роли пользователя, созданной кем-то другим, вы можете использовать
user_role_load_by_name()
объект для этой роли пользователя. Тогда вы просто захватите идентификатор с$role->rid
.источник
user_role_grant_permissions()
Я хотел бы добавить пример кода, который ближе к первоначальному вопросу о том, как программно назначать разрешения для существующих ролей.
Вы можете искать роли по их имени, получать идентификатор роли и затем назначать разрешения следующим образом (например, в реализации hook_update):
источник