Atribuir programaticamente a função de usuário

11

Tenho várias funções no meu site e desejo atribuir uma certa função a alguns usuários quando eles se registram no meu site.

Como posso atribuir uma função específica a novos usuários programaticamente quando eles enviam seus formulários de registro?
Tentei módulos como logintoboggan, autoassignrole, mas eles fornecem uma função de usuário padrão no registro, quando desejo atribuir uma função a usuários específicos, não a todos os usuários que se inscrevem no meu site.

Somya Gupta
fonte

Respostas:

10

Embora você não considere isso "programático", você pode usar o módulo Regras para fazer isso.

Instale o módulo e crie uma nova regra no evento "Depois de salvar uma nova conta de usuário". Para a ação, você desejará definir a função de usuário como ABC (onde ABC são as funções que você deseja atribuir).

Você pode limitar a função a usuários específicos adicionando condições. Por exemplo, você pode usar a condição "Comparação de dados" para aplicar a regra apenas se o usuário tiver escolhido um valor específico no formulário de registro (exemplo detalhado: limite a regra apenas aos usuários que selecionam "feminino" como sexo no registro) )

Você precisará criar uma regra para cada combinação de condição / função que deseja atribuir. No entanto, o Rules é um módulo amplamente usado e pode ser exportado manualmente ou com o módulo de Recursos, oferecendo muita flexibilidade.

Patrick Kenny
fonte
12

Também resolvemos esta tarefa com a função user_multiple_role_edit () . Em nosso caso, não reagimos no formulário de registro, mas em um menu de retorno de chamada especial para criar usuários em tempo real.

Primeiro: Crie um usuário

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

Segundo: atribuir o usuário à função

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

Isso criará as funções padrão 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';
}
Coomie
fonte
2

No meu caso, havia apenas quatro perfis profile2, mas se a pessoa estava tendo um certo valor em seu formulário de registro, eu precisava adicioná-los a uma nova função. Aqui está o que eu fiz:

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