drupal 7 – Asignar roles de usuario de forma dinámica

Pregunta:

Tengo una aplicación que usa acceso al dominio y estoy buscando reutilizar un conjunto de roles de suscriptor en todos los dominios, asignándolos al iniciar sesión.

Esperaba usar hook_user_load para agregar roles adicionales.

Tengo un código como este:

/**
 * Implements hook_user_load()
 * 
 * Dynamically assign configured roles based on active domain and subscription
 */
function EXAMPLE_user_load($users) {

  // Process each account once per request
  $processed_uids = &drupal_static(__FUNCTION__, array());
  // Get defined roles
  $roles = user_roles(TRUE);

  // Process accounts
  foreach ($users as $uid => $account) {
    $grant_rids = array();
    if(!in_array($uid, $processed_uids)){
      // Code to get grant role ids here...
      // ...
      // ...
      // Grant subscriber roles
      if(!empty($grant_rids)){
        foreach($grant_rids as $rid){
          // Matching role exists and not already assigned
          if(!empty($roles[$rid]) && !array_key_exists($rid, $users[$uid]->roles)){
            $users[$uid]->roles[$rid] = $roles[$rid];
          }
        }
      }
      $processed_uids[] = $uid;
    }
  }
}

Con este enfoque, los roles se agregan y puedo verlos en la matriz $users después del procesamiento.

Sin embargo, el usuario que hook_user_load sesión, a pesar de ejecutar hook_user_load , no parece tener esos roles "configurados" (es decir, no está autenticado para tener ese rol)

¿Quizás algún tipo de problema de caché?

¿Alguien tiene alguna idea sobre lo que debe cambiarse anteriormente o cómo asignar roles de usuario dinámicamente cuando el usuario inicia sesión o cuando se carga el usuario?

ACTUALIZAR:

Bueno, resulta que en realidad puedes alterar los roles de los usuarios en hook_user_load .

Mi problema fue causado por un error de ctools que descubrí en mis viajes de depuración por el cual el contexto del usuario que había iniciado sesión en ese momento no cargaba completamente la entidad de usuario y, por lo tanto, las comprobaciones de acceso para el acceso a la página del Panel estaban fallando. También necesitaba un drupal_static_reset('user_access') para restablecer la user_access estática de user_access permisos de user_access . Parche publicado aquí http://drupal.org/node/2010124

Después de eso, la asignación dinámica de roles parece estar funcionando bien.

ACTUALIZACIÓN 2

Escribí demasiado pronto, sigo teniendo problemas …

Se actualizará cuando se resuelva.

ACTUALIZACIÓN 3

Bien, los problemas restantes estaban relacionados con el almacenamiento en caché de contexto de ctools. Terminé escribiendo mi propio complemento de acceso a ctools para asegurarme de que el contexto del usuario que inició sesión se verifique sin almacenar en caché en cada solicitud de acceso. Después de eso, todo parece estar bien nuevamente.

Respuesta:

Puede probar user_multiple_role_edit , algo como esto podría ayudar.

 $user_id = $user->uid; // user the role human name $role_name = 'My Awesome Role'; if (user_role_load_by_name($role_name)) { // No need to check if the role is already granted user_multiple_role_edit(array($user_id), 'add_role', $role->rid); }

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım