Attribuer un rôle d'utilisateur par programme

12

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 qui s'inscrivent sur mon site.

Somya Gupta
la source

Réponses:

10

Bien que vous ne puissiez pas considérer cela comme «programmatique», vous pouvez utiliser le module Règles 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é.

Patrick Kenny
la source
13

Nous avons également résolu cette tâche avec la fonction user_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);
gue
la source
5

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';
}
Coomie
la source
2

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