2012-06-28 6 views
5

я не могу найти решение или правильный пример для чего-то, что должно быть довольно просто: назначить роль пользователя при его создании, это то, что я пытаюсь:Drupal: назначить роли в 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); 

Пользователь не создается, как я могу это сделать?

Спасибо

ответ

12

Вы не назвали roles элемент как таковой. Попробуйте его модифицированную версию:

$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

:-) глупый я !!! –

5

И вы можете использовать объекты для этого.

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

Вот крючок я написал, чтобы добавить роль для пользователя, когда новый пользователь вставляется:

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

Благодаря this tip, теперь гораздо проще.

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

Это код изменения –

+1

Хотя этот код может служить ответом на вопрос, он помог бы, если бы был добавлен комментарий, который точно описывает, что делает код и как он должен быть интегрирован с кодом в вопросе. Это поможет другим людям в будущем решить этот вопрос и ответить. –

Смежные вопросы