2012-06-28 3 views
5

no puedo encontrar una solución o un ejemplo adecuado para algo que debería ser bastante sencilla: asignar una función a un usuario cuando se crea, esto es lo que trato:Drupal: asignar papeles en 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); 

El usuario no está siendo creado, ¿cómo puedo hacer esto?

Gracias

Respuesta

12

de que haya nombrado el miembro roles como tal. Pruebe su versión modificada:

$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

:-) tonto me !!! –

5

Y puede usar objetos para hacer eso.

// 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

Aquí es un gancho que he escrito para agregar una función a un usuario cuando se inserta un nuevo usuario:

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

Gracias a this tip, ahora es mucho más simple.

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

Es modificar el código –

+1

Si bien este código puede servir para responder la pregunta, sería útil agregar comentarios que describan exactamente qué hace el código y cómo debe integrarse con el código en la pregunta. Esto ayudará a otros en el futuro que se encuentren con esta pregunta y respuesta. –