Asignar roles de usuario mediante programación

11

Tengo varias funciones en mi sitio web y quiero asignar una determinada función a algunos usuarios cuando se registran en mi sitio.

¿Cómo puedo asignar un rol específico a los nuevos usuarios mediante programación cuando envían sus formularios de registro?
He intentado módulos como logintoboggan, autoassignrole, pero proporcionan un rol de usuario predeterminado en el registro, cuando quiero asignar un rol a usuarios específicos, no a todos los usuarios que se registran en mi sitio.

Somya Gupta
fuente

Respuestas:

10

Si bien es posible que no considere que esto sea "programático", puede usar el módulo Reglas para hacerlo.

Instale el módulo y cree una nueva regla en el evento "Después de guardar una nueva cuenta de usuario". Para la acción, querrá establecer el rol de usuario en ABC (donde ABC son los roles que desea asignar).

Puede limitar el rol a usuarios específicos agregando condiciones. Por ejemplo, puede usar la condición "Comparación de datos" para aplicar solo la regla si el usuario ha elegido un valor específico en el formulario de registro (ejemplo detallado: limite la regla solo a aquellos usuarios que seleccionen "femenino" como su género en el registro )

Tendrá que crear una regla para cada combinación de condición / rol que desee otorgar. Sin embargo, Reglas es un módulo muy utilizado y se puede exportar manualmente o con el módulo Características, lo que le brinda mucha flexibilidad.

Patrick Kenny
fuente
12

También resolvimos esta tarea con la función user_multiple_role_edit () . En nuestro caso de uso, no reaccionamos en el formulario de registro, sino en una devolución de llamada de menú especial para crear usuarios sobre la marcha.

Primero: crear un usuario

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

Segundo: asignar al usuario al rol

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

Esto hará que los roles predeterminados sean 4,5 y 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
fuente
2

En mi caso, solo había cuatro perfiles profile2, pero si la persona tenía un cierto valor en su formulario de registro, tenía que agregarlos a un nuevo rol. Aquí esta lo que hice:

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