Assegnare a livello di codice il ruolo utente


12

Ho più ruoli sul mio sito Web e desidero assegnare un determinato ruolo ad alcuni utenti quando si registrano sul mio sito.

Come posso assegnare un ruolo specifico ai nuovi utenti a livello di codice quando inviano i loro moduli di registrazione?
Ho provato moduli come logintoboggan, autoassignrole, ma forniscono un ruolo utente predefinito al momento della registrazione, quando voglio assegnare un ruolo a utenti specifici, non a tutti gli utenti che si iscrivono al mio sito.

Risposte:


10

Anche se non puoi considerarlo "programmatico", puoi utilizzare il modulo Regole per farlo.

Installa il modulo e crea una nuova regola sull'evento "Dopo aver salvato un nuovo account utente". Per l'azione, dovrai impostare il ruolo utente su ABC (dove ABC sono i ruoli che desideri assegnare).

È possibile limitare il ruolo a utenti specifici aggiungendo condizioni. Ad esempio, è possibile utilizzare la condizione "Confronto dati" per applicare la regola solo se l'utente ha scelto un valore specifico nel modulo di registrazione (esempio dettagliato: limitare la regola solo a quegli utenti che selezionano "femmina" come genere al momento della registrazione ).

Dovrai creare una regola per ogni combinazione condizione / ruolo che desideri assegnare. Tuttavia, Rules è un modulo ampiamente utilizzato e può essere esportato manualmente o con il modulo Features, offrendo molta flessibilità.


13

Abbiamo anche risolto questo compito con la funzione user_multiple_role_edit () . Nel nostro caso non abbiamo reagito sul modulo di registrazione ma su uno speciale menu di richiamata per creare utenti al volo.

Primo: crea un utente

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

Secondo: assegnare l'utente al ruolo

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

5

Ciò renderà i ruoli predefiniti 4,5 e 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

Nel mio caso c'erano solo quattro profili profile2, ma se la persona aveva un certo valore nel loro modulo di registrazione, dovevo aggiungerli a un nuovo ruolo. Ecco cosa ho fatto:

<?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);
      }
    }
  }
}
?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.