web-dev-qa-db-fra.com

Attribuer un rôle d'utilisateur par programmation

J'ai plusieurs rôles sur mon site Web et je veux attribuer un certain rôle à certains utilisateurs lorsqu'ils s'inscrivent sur mon site.

Comment puis-je attribuer un rôle spécifique aux nouveaux utilisateurs par programme lorsqu'ils soumettent leurs formulaires d'inscription?
J'ai essayé des modules comme logintoboggan, autoassignrole, mais ils fournissent un rôle d'utilisateur par défaut lors de l'inscription, lorsque je veux attribuer un rôle à des utilisateurs spécifiques, pas à tous les utilisateurs s'inscrivant sur mon site.

12
Somya Gupta

Bien que vous ne puissiez pas considérer cela comme "programmatique", vous pouvez utiliser le module Rules pour ce faire.

Installez le module et créez une nouvelle règle sur l'événement "Après avoir enregistré un nouveau compte utilisateur". Pour l'action, vous souhaiterez définir le rôle utilisateur sur ABC (où ABC sont les rôles que vous souhaitez attribuer).

Vous pouvez limiter le rôle à des utilisateurs spécifiques en ajoutant des conditions. Par exemple, vous pouvez utiliser la condition "Comparaison de données" pour n'appliquer la règle que si l'utilisateur a choisi une valeur spécifique sur le formulaire d'inscription (exemple détaillé: limiter la règle aux seuls utilisateurs qui sélectionnent "femme" comme sexe lors de l'inscription) ).

Vous devrez créer une règle pour chaque combinaison condition/rôle que vous souhaitez attribuer. Cependant, Rules est un module largement utilisé et peut être exporté manuellement ou avec le module Features, ce qui vous donne beaucoup de flexibilité.

10
Patrick Kenny

Nous avons également résolu cette tâche avec la fonction ser_multiple_role_edit () . Dans notre cas d'utilisation, nous n'avons pas réagi sur le formulaire d'inscription, mais sur un rappel de menu spécial pour créer des utilisateurs à la volée.

Premièrement: créer un utilisateur

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

Deuxièmement: affecter l'utilisateur au rôle

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

Cela rendra les rôles par défaut 4,5 et 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';
}
5
Coomie

Dans mon cas, il n'y avait que quatre profils profile2, mais si la personne avait une certaine valeur dans son formulaire d'inscription, je devais l'ajouter à un nouveau rôle. Voici ce que j'ai fait:

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