Програмно призначити роль користувача


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);

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';
}

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);
      }
    }
  }
}
?>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.