it-swarm-es.com

Hacerse pasar por otro usuario mediante programación sin hacer que el usuario actualmente conectado cierre sesión

¿Cómo debería un módulo cambiar el valor de la global $user, ejecuta su propio código y restaura el valor original de $user sin que el usuario actual se desconecte si se produce un error?

9
kiamlaluno

La función drupal_cron_run () da un ejemplo perfecto para esto exactamente, ya que cambia el usuario actual a anónimo cada vez que se ejecuta cron, luego vuelve a cambiar después de hacerlo.

// Prevent session information from being saved while doing funky stuff.
$original_session_state = drupal_save_session();
drupal_save_session(FALSE);

// Force the current user to anonymous to ensure consistent permissions on
// funky stuff runs.
$original_user = $GLOBALS['user'];
$GLOBALS['user'] = drupal_anonymous_user(); // Or use user_load() for a non-anonymous user.

// Do funky stuff here...

// Restore the user.
$GLOBALS['user'] = $original_user;
drupal_save_session($original_session_state);
18
Dave Reid