2012-06-28 17 views
5

non riesco a trovare una soluzione o giusto esempio per qualcosa che dovrebbe essere abbastanza semplice: assegnare un ruolo a un utente durante la creazione, questo è quello che sto cercando:Drupal: assegnare ruoli in USER_SAVE

$edit = array(
     'name' => $_POST['name'], 
     'pass' => $password, 
     'mail' => $_POST['email'], 
     'status' => 0, 
     'language' => 'es', 
     'init' => $_POST['email'], 
     array(2 =>'authenticated', 4=>'my custom role') //as id and named in role db table 
    ); 

user_save(NULL, $edit); 

L'utente non è stato creato, come posso fare questo?

Grazie

risposta

12

Non hai nominato il membro roles in quanto tale. Prova la sua versione modificata:

$edit = array(
    'name' => $_POST['name'], 
    'pass' => $password, 
    'mail' => $_POST['email'], 
    'status' => 0, 
    'language' => 'es', 
    'init' => $_POST['email'], 
    'roles' => array(
    2 => 'authenticated', 
    4 => 'my custom role', 
), 
); 

user_save(NULL, $edit); 
+0

:-) silly me !!! –

5

E puoi usare gli oggetti per farlo.

// Check if user's email is unique 
if (!user_load_by_mail($_POST['email'])) { 
    $account = new stdClass; 
    $account->name = $_POST['name']; 
    $account->pass = user_hash_password($password); 
    $account->mail = $_POST['email']; 
    $account->status = FALSE; 
    $account->language = 'es'; 
    $account->init = $_POST['email']; 
    $account->roles = array(
    DRUPAL_AUTHENTICATED_RID => TRUE, 
    'Your custom role' => TRUE, 
); 
    user_save($account); 
} 
0

Ecco un gancio che ho scritto per aggiungere un ruolo a un utente quando viene inserito un nuovo utente:

<?php 
function MYMODULE_user_insert(&$edit, $account, $category){ 
    if (array_key_exists('profile_1', $account)) { 
    $is_university = FALSE; 
    if ($account->profile_sport_club['field_club']['und'][0]['value'] == 1) { 
     $is_university = TRUE; 
    } 
    if ($is_university) { 
     $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); 
     } 
    } 
    } 
} 
?> 

Grazie ad this tip, è ora molto più semplice.

0
function first_user_insert(&$edit, $account, $category, $node){ 
    $uid = $account->uid; 
    $role_name = 'role name'; 
    if ($role = user_role_load_by_name($role_name)) { 
    user_multiple_role_edit(array($uid), 'add_role', $role->rid); 
    } 
} 
+0

È il codice di modifica –

+1

Sebbene questo codice possa servire per rispondere alla domanda, sarebbe di aiuto se fosse aggiunto un commento che descriva esattamente cosa fa il codice e come dovrebbe essere integrato con il codice nella domanda. Ciò aiuterà gli altri in futuro a trovare questa domanda e a rispondere. –