Программно выдавая себя за другого пользователя, не заставляя пользователя, зарегистрированного в настоящее время, выходить из системы
Вопрос
Как модуль должен изменить значение глобального $user
, выполнить свой собственный код и восстановить исходное значение $user
Не заставляя текущего пользователя выйти из строя, если произойдет ошибка?
Решение
А drupal_cron_run () Функция дает прекрасный пример для именно этого, поскольку она изменяет текущего пользователя на анонимный всякий раз, когда запускается Cron, затем переключается назад после этого.
// 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);
Не связан с drupal.stackexchange