Programmgesteuertes Identifizieren eines anderen Benutzers, ohne dass sich der aktuell angemeldete Benutzer abmeldet
9
Wie sollte ein Modul den Wert von global ändern $user, seinen eigenen Code ausführen und den ursprünglichen Wert von wiederherstellen, $userohne dass der aktuelle Benutzer abgemeldet wird, wenn ein Fehler auftritt?
Es gibt ein altes offenes Problem, das eine Funktion hinzufügt, die dies auch bei mehrmaligem Aufruf richtig handhaben kann. Siehe drupal.org/node/287292 . Bitte überprüfen und testen Sie den Patch dort.
Berdir
1
Auf drupal.org wurde eine Community-Dokumentation erstellt, die die Lösung bietet, sich als ein anderer Benutzer für Drupal 6, Drupal 7 und Drupal 8 auszugeben: Sich sicher als ein anderer Benutzer auszugeben .
iStryker
Antworten:
18
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);
Es ist erwähnenswert, dass Sie das aktuelle Benutzerobjekt irgendwo ablegen können (in $GLOBALSoder 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.
Greg
Nur potenzielles 1 Problem mit diesem Code. Sie sollten die alte Sitzung in einer Variablen $ old_session speichern. Setzen Sie die Speichersitzung auf false und dann am Ende auf drupal_save_session ($ old_session).
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.
quelle
$GLOBALS
oder nur in einer anderen Variablen zur sicheren Aufbewahrung) und zu jedem Benutzer wechseln können, indem Sie es mit ladenuser_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.