Предоставление роли Drupal всем пользователям, имеющим определенную роль

StackOverflow https://stackoverflow.com/questions/1669785

  •  13-09-2019
  •  | 
  •  

Вопрос

Мне нужно автоматически применить роль Роль X ко всем пользователям Drupal, которым была предоставлена ​​отдельная роль Роль Y.Другими словами, я хочу, чтобы роль X была подмножеством роли Y.Как я могу это сделать?

Это было полезно?

Решение

Вы могли бы реализовать hook_user() в специальном модуле.При действии «вставить» и/или «обновить» вы должны проверить роль Y в $account->roles множество.Если присутствует, добавьте роль X, если ее еще нет.Это гарантирует, что ваше правило будет применяться каждый раз, когда учетная запись пользователя будет создана и/или изменена.

Для начальной/однократной операции взгляните на user_multiple_role_edit().Он позволяет добавлять или удалять роли для массива идентификаторов пользователей.Альтернативно, вы можете сделать это непосредственно в базе данных:

INSERT INTO users_roles (uid, rid)
  SELECT uid, [roleX_ID] AS rid FROM users_roles
    WHERE uid IN
      (SELECT uid FROM users_roles WHERE rid = [roleY_ID])
    AND uid NOT IN
      (SELECT uid FROM users_roles WHERE rid = [roleX_ID])
;

Другие советы

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

Обычно я бы не возражал против написания SQL или чего-то подобного, но в этом случае, поскольку это происходит на рабочем сайте, я бы предпочел другой путь, поскольку, если при написании сырого SQL что-то может легко пойти не так, небольшая опечатка может вызвать большие проблемы. .Еще один положительный момент заключается в том, что вы можете столкнуться с проблемами, поскольку Drupal не будет знать, какой необработанный SQL вы запускаете в своей базе данных, и может рассинхронизироваться с некоторыми процессами, перехватчиками и другими процессами, которые обычно запускаются, когда вы делаете что-то через API Drupal.

Вместо этого вы можете использовать интерфейс администрирования пользователя Drupal.Я действительно думаю, что в данном случае это самый простой способ делать то, что хочешь.Просто отфильтруйте всех пользователей, которые являются студентами.Щелкните всех пользователей и дайте им роль участника.Это делается за несколько кликов и очень безопасно, поскольку Drupal выполнит за вас весь SQL-запрос.

Обновлено
Я удивлен, что при таком большом количестве пользователей у вас нет специальной настройки страницы управления пользователями и контентом с помощью views_bulk_operations.За несколько минут вы можете настроить страницу администратора, которую можно использовать для выполнения массовых операций, таких как изменение статуса пользователя, ролей или выполнения аналогичных задач для узлов.Вы можете создавать свои собственные фильтры, используя фильтры открытых представлений.Таким образом, несколькими щелчками мыши вы можете выбрать всех пользователей с ролью студента, не являющихся участниками, выбрать их всех и добавить к ним список участников.Преимущество этого не только в том, что это быстро и безопасно, но и в том, что вы можете создать несколько удобных страниц управления для администраторов вашего сайта, создателей контента и т. д.Вам следует рассмотреть возможность изучения этого модуля.

Модуль LDAP позволяет динамически назначать роли на основе DN.На самом деле мне пришлось написать свой собственный модуль, адаптированный специально под нашу систему, иначе я был бы более чем рад им поделиться.

текст ссылки

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top