Программно назначить роль пользователя

12

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

Как я могу назначить определенную роль новым пользователям программно, когда они отправляют свои регистрационные формы?
Я пробовал такие модули, как logintoboggan, autoassignrole, но они предоставляют роль пользователя по умолчанию при регистрации, когда я хочу назначить роль конкретным пользователям, а не всем пользователям, регистрирующимся на моем сайте.

Сомя Гупта
источник

Ответы:

10

Хотя вы можете не считать это «программным», вы можете использовать модуль « Правила » для этого.

Установите модуль и создайте новое правило для события «После сохранения новой учетной записи пользователя». Для этого действия вы захотите установить для роли пользователя значение ABC (где ABC - это роль, которую вы хотите назначить).

Вы можете ограничить роль для определенных пользователей, добавив условия. Например, вы можете использовать условие «Сравнение данных», чтобы применять правило только в том случае, если пользователь выбрал конкретное значение в форме регистрации (подробный пример: ограничьте правило только теми пользователями, которые выбирают «женский» в качестве пола при регистрации). ).

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

Патрик Кенни
источник
13

Мы также решили эту задачу с помощью функции user_multiple_role_edit () . В нашем случае мы реагировали не на регистрационную форму, а на специальный обратный вызов меню для создания пользователей на лету.

Первое: создать пользователя

$user = new stdClass();
$user->name = $name;
$user->status = 1;
user_save($user);

Второе: назначьте пользователя на роль

$role = user_role_load_by_name("my custom role");
user_multiple_role_edit(array($user->uid), 'add_role', $role->rid);
GUE
источник
5

Это сделает роли по умолчанию 4,5 и 6:

function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id){
    $form['account']['roles']['#default_value'][] = '4';
    $form['account']['roles']['#default_value'][] = '5';
    $form['account']['roles']['#default_value'][] = '6';
}
Coomie
источник
2

В моем случае было только четыре профиля profile2, но если у человека было определенное значение в их регистрационной форме, я должен был добавить их к новой роли. Вот что я сделал:

<?php 
function MYMODULE_user_insert(&$edit, $account, $category){
  if (array_key_exists('profile_club', $account)) {
    $is_uni = FALSE;
    if ($account->profile_club['field_uni_club']['und'][0]['value'] == 1 ) {
      $is_uni = TRUE;
    }
    if ($is_uni) {
      $uid = $account->uid;
      $role_name = 'uni_club';
      if ($role = user_role_load_by_name($role_name)) {
        user_multiple_role_edit(array($uid), 'add_role', $role->rid);
      }
    }
  }
}
?>
Druvision
источник