web-dev-qa-db-ja.com

現在ログインしているユーザーをログアウトさせずに、プログラムで別のユーザーになりすます

エラーが発生した場合、現在のユーザーをログアウトさせずに、モジュールがグローバル$userの値を変更し、独自のコードを実行して$userの元の値を復元するにはどうすればよいですか?

9
kiamlaluno

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);
18
Dave Reid