Benutzerrolle programmgesteuert zuweisen

11

Ich habe mehrere Rollen auf meiner Website und möchte einigen Benutzern eine bestimmte Rolle zuweisen, wenn sie sich auf meiner Website registrieren.

Wie kann ich neuen Benutzern programmgesteuert eine bestimmte Rolle zuweisen, wenn sie ihre Registrierungsformulare einreichen?
Ich habe Module wie logintoboggan und autoassignrole ausprobiert, aber sie bieten eine Standardbenutzerrolle bei der Registrierung, wenn ich bestimmten Benutzern eine Rolle zuweisen möchte, nicht allen Benutzern, die sich auf meiner Site anmelden.

Somya Gupta
quelle

Antworten:

10

Obwohl Sie dies möglicherweise nicht als "programmatisch" betrachten, können Sie dazu das Modul " Regeln " verwenden .

Installieren Sie das Modul und erstellen Sie eine neue Regel für das Ereignis "Nach dem Speichern eines neuen Benutzerkontos". Für die Aktion möchten Sie die Benutzerrolle auf ABC setzen (wobei ABC die Rolle (n) sind, die Sie zuweisen möchten).

Sie können die Rolle auf bestimmte Benutzer beschränken, indem Sie Bedingungen hinzufügen. Beispielsweise können Sie die Bedingung "Datenvergleich" verwenden, um die Regel nur anzuwenden, wenn der Benutzer einen bestimmten Wert im Registrierungsformular ausgewählt hat (detailliertes Beispiel: Beschränken Sie die Regel nur auf diejenigen Benutzer, die bei der Registrierung "weiblich" als Geschlecht auswählen ).

Sie müssen für jede Bedingung / Rollenkombination, die Sie vergeben möchten, eine Regel erstellen. Rules ist jedoch ein weit verbreitetes Modul und kann manuell oder mit dem Feature-Modul exportiert werden, was Ihnen viel Flexibilität bietet.

Patrick Kenny
quelle
12

Wir haben diese Aufgabe auch mit der Funktion user_multiple_role_edit () gelöst . In unserem Anwendungsfall haben wir nicht auf das Registrierungsformular reagiert, sondern auf einen speziellen Menü-Rückruf, um Benutzer im laufenden Betrieb zu erstellen.

Erstens: Erstellen Sie einen Benutzer

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

Zweitens: Weisen Sie den Benutzer der Rolle zu

$role = user_role_load_by_name("my custom role");
user_multiple_role_edit(array($user->uid), 'add_role', $role->rid);
gue
quelle
5

Dadurch werden die Standardrollen 4,5 und 6 festgelegt:

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
quelle
2

In meinem Fall gab es nur vier profile2-Profile, aber wenn die Person einen bestimmten Wert in ihrem Registrierungsformular hatte, musste ich sie einer neuen Rolle hinzufügen. Folgendes habe ich getan:

<?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
quelle