Programowo przypisuj rolę użytkownika

12

Mam wiele ról w mojej witrynie i chcę przypisać pewną rolę niektórym użytkownikom, którzy zarejestrują się w mojej witrynie.

Jak mogę przypisać określoną rolę nowym użytkownikom programowo, gdy przesyłają formularze rejestracyjne?
Próbowałem modułów, takich jak logintoboggan, autoassignrole, ale zapewniają one domyślną rolę użytkownika podczas rejestracji, gdy chcę przypisać rolę określonym użytkownikom, a nie wszystkim użytkownikom rejestrującym się w mojej witrynie.

Somya Gupta
źródło

Odpowiedzi:

10

Chociaż nie możesz uważać tego za „programowe”, możesz to zrobić za pomocą modułu Reguły .

Zainstaluj moduł i utwórz nową regułę dla zdarzenia „Po zapisaniu nowego konta użytkownika”. Dla akcji będziesz chciał ustawić rolę użytkownika na ABC (gdzie ABC to role, które chcesz przypisać).

Możesz ograniczyć rolę do określonych użytkowników, dodając warunki. Na przykład możesz użyć warunku „Porównanie danych”, aby zastosować regułę tylko wtedy, gdy użytkownik wybrał określoną wartość w formularzu rejestracyjnym (szczegółowy przykład: ogranicz regułę tylko do tych użytkowników, którzy podczas rejestracji wybiorą „kobietę” jako swoją płeć ).

Będziesz musiał stworzyć regułę dla każdej kombinacji warunków / ról, którą chcesz przyznać. Jednak Reguły to szeroko stosowany moduł, który można eksportować ręcznie lub za pomocą modułu Funkcje, co zapewnia dużą elastyczność.

Patrick Kenny
źródło
13

Rozwiązaliśmy również to zadanie za pomocą funkcji user_multiple_role_edit () . W naszym przypadku nie zareagowaliśmy na formularz rejestracyjny, ale na specjalne wywołanie zwrotne menu, aby tworzyć użytkowników w locie.

Po pierwsze: utwórz użytkownika

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

Po drugie: przypisz użytkownika do roli

$role = user_role_load_by_name("my custom role");
user_multiple_role_edit(array($user->uid), 'add_role', $role->rid);
gue
źródło
5

Spowoduje to ustawienie domyślnych ról 4,5 i 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
źródło
2

W moim przypadku były tylko cztery profile profil2, ale jeśli dana osoba miała określoną wartość w formularzu rejestracyjnym, musiałem dodać ją do nowej roli. Oto co zrobiłem:

<?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
źródło