web-dev-qa-db-fra.com

Ignoraper par programme un autre utilisateur sans causer l'utilisateur actuellement connecté de se déconnecter

Comment un module devrait-il modifier la valeur du global $user, exécuter son propre code et restaurer la valeur initiale de $user Sans que l'utilisateur actuel soit déconnecté si une erreur se produit?

9
kiamlaluno

La fonction drupal_cron_run () La fonction donne un exemple parfait pour cela, car elle modifie l'utilisateur actuel vers anonyme chaque fois que Cron est exécuté, puis passe le retour après sa fin.

// 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