In che modo un modulo dovrebbe modificare il valore del globale $user, eseguire il proprio codice e ripristinare il valore originale $usersenza causare la disconnessione dell'utente corrente in caso di errore?
In che modo un modulo dovrebbe modificare il valore del globale $user, eseguire il proprio codice e ripristinare il valore originale $usersenza causare la disconnessione dell'utente corrente in caso di errore?
Risposte:
La funzione drupal_cron_run () fornisce un esempio perfetto proprio per questo, poiché cambia l'utente corrente in anonimo ogni volta che cron viene eseguito, quindi torna indietro dopo averlo fatto.
// 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);
$GLOBALSspostare l'oggetto utente corrente da qualche parte (in o semplicemente in un'altra variabile per la conservazione) e passare a qualsiasi utente caricandolo con user_load(). Ciò ti consente di fare cose orribili come il travestimento come utenti specifici impostati con autorizzazioni specifiche per eseguire un processo specifico. Il principio è lo stesso.