Wie sollte ein Modul den Wert von global ändern $user
, seinen eigenen Code ausführen und den ursprünglichen Wert von wiederherstellen, $user
ohne dass der aktuelle Benutzer abgemeldet wird, wenn ein Fehler auftritt?
Wie sollte ein Modul den Wert von global ändern $user
, seinen eigenen Code ausführen und den ursprünglichen Wert von wiederherstellen, $user
ohne dass der aktuelle Benutzer abgemeldet wird, wenn ein Fehler auftritt?
Antworten:
Die Funktion drupal_cron_run () bietet genau dafür ein perfektes Beispiel, da sie den aktuellen Benutzer bei jeder Ausführung von cron in anonym ändert und nach Abschluss des Vorgangs wieder zurückschaltet.
// 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);
$GLOBALS
oder nur in einer anderen Variablen zur sicheren Aufbewahrung) und zu jedem Benutzer wechseln können, indem Sie es mit laden user_load()
. Dies ermöglicht es Ihnen, einige schreckliche Dinge wie Maskerade zu tun, wenn ein bestimmter Benutzer mit bestimmten Berechtigungen einen bestimmten Prozess ausführt. Das Prinzip ist das gleiche.