Jak moduł powinien zmienić wartość globalną $user
, wykonać swój własny kod i przywrócić pierwotną wartość $user
bez powodowania wylogowania bieżącego użytkownika w przypadku wystąpienia błędu?
Jak moduł powinien zmienić wartość globalną $user
, wykonać swój własny kod i przywrócić pierwotną wartość $user
bez powodowania wylogowania bieżącego użytkownika w przypadku wystąpienia błędu?
Odpowiedzi:
Funkcja drupal_cron_run () stanowi doskonały przykład tego, ponieważ zmienia bieżącego użytkownika na anonimowego za każdym razem, gdy uruchamiany jest cron, a następnie przełącza się po jego zakończeniu.
// 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
innej zmiennej lub po prostu w innej zmiennej dla bezpieczeństwa) i przełączyć się na dowolnego użytkownika, ładując go user_load()
. Co pozwala ci robić okropne rzeczy, takie jak maskarada, jako konkretni użytkownicy skonfigurowani z określonymi uprawnieniami do wykonania określonego procesu. Zasada jest taka sama.