class SwitchUserController
Controller for switch to another user account.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements \Drupal\Core\DependencyInjection\ContainerInjectionInterface uses \Drupal\Core\DependencyInjection\AutowireTrait, \Drupal\Core\Logger\LoggerChannelTrait, \Drupal\Core\Messenger\MessengerTrait, \Drupal\Core\Routing\RedirectDestinationTrait, \Drupal\Core\StringTranslation\StringTranslationTrait
- class \Drupal\devel\Controller\SwitchUserController extends \Drupal\Core\Controller\ControllerBase
 
 
Expanded class hierarchy of SwitchUserController
File
- 
              src/
Controller/ SwitchUserController.php, line 16  
Namespace
Drupal\devel\ControllerView source
class SwitchUserController extends ControllerBase {
  
  /**
   * The current user.
   */
  protected AccountProxyInterface $account;
  
  /**
   * The user storage.
   */
  protected UserStorageInterface $userStorage;
  
  /**
   * The session manager service.
   */
  protected SessionManagerInterface $sessionManager;
  
  /**
   * The session.
   */
  protected Session $session;
  
  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) : static {
    $instance = parent::create($container);
    $instance->account = $container->get('current_user');
    $instance->userStorage = $container->get('entity_type.manager')
      ->getStorage('user');
    $instance->moduleHandler = $container->get('module_handler');
    $instance->sessionManager = $container->get('session_manager');
    $instance->session = $container->get('session');
    return $instance;
  }
  
  /**
   * Switches to a different user.
   *
   * We don't call session_save_session() because we really want to change
   * users. Usually unsafe!
   *
   * @param string|null $name
   *   The username to switch to, or NULL to log out.
   *
   * @return \Symfony\Component\HttpFoundation\RedirectResponse
   *   A redirect response object.
   *
   * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
   */
  public function switchUser(?string $name = NULL) {
    if (empty($name) || !$account = $this->userStorage
      ->loadByProperties([
      'name' => $name,
    ])) {
      throw new AccessDeniedHttpException();
    }
    $account = reset($account);
    // Call logout hooks when switching from original user.
    $this->moduleHandler
      ->invokeAll('user_logout', [
      $this->account,
    ]);
    // Regenerate the session ID to prevent against session fixation attacks.
    $this->sessionManager
      ->regenerate();
    // Based off masquarade module as:
    // https://www.drupal.org/node/218104 doesn't stick and instead only
    // keeps context until redirect.
    $this->account
      ->setAccount($account);
    $this->session
      ->set('uid', $account->id());
    // Call all login hooks when switching to masquerading user.
    $this->moduleHandler
      ->invokeAll('user_login', [
      $account,
    ]);
    return $this->redirect('<front>');
  }
}
Members
| Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides | 
|---|---|---|---|---|---|
| ControllerBase::$configFactory | protected | property | The configuration factory. | ||
| ControllerBase::$currentUser | protected | property | The current user service. | 2 | |
| ControllerBase::$entityFormBuilder | protected | property | The entity form builder. | ||
| ControllerBase::$entityTypeManager | protected | property | The entity type manager. | ||
| ControllerBase::$formBuilder | protected | property | The form builder. | 1 | |
| ControllerBase::$keyValue | protected | property | The key-value storage. | 1 | |
| ControllerBase::$languageManager | protected | property | The language manager. | 1 | |
| ControllerBase::$moduleHandler | protected | property | The module handler. | 1 | |
| ControllerBase::$stateService | protected | property | The state service. | ||
| ControllerBase::cache | protected | function | Returns the requested cache bin. | ||
| ControllerBase::config | protected | function | Retrieves a configuration object. | ||
| ControllerBase::container | private | function | Returns the service container. | ||
| ControllerBase::currentUser | protected | function | Returns the current user. | 2 | |
| ControllerBase::entityFormBuilder | protected | function | Retrieves the entity form builder. | ||
| ControllerBase::entityTypeManager | protected | function | Retrieves the entity type manager. | ||
| ControllerBase::formBuilder | protected | function | Returns the form builder service. | 1 | |
| ControllerBase::keyValue | protected | function | Returns a key/value storage collection. | 1 | |
| ControllerBase::languageManager | protected | function | Returns the language manager service. | 1 | |
| ControllerBase::moduleHandler | protected | function | Returns the module handler. | 1 | |
| ControllerBase::redirect | protected | function | Returns a redirect response object for the specified route. | ||
| ControllerBase::state | protected | function | Returns the state storage service. | ||
| LoggerChannelTrait::$loggerFactory | protected | property | The logger channel factory service. | ||
| LoggerChannelTrait::getLogger | protected | function | Gets the logger for a specific channel. | ||
| LoggerChannelTrait::setLoggerFactory | public | function | Injects the logger channel factory. | ||
| MessengerTrait::$messenger | protected | property | The messenger. | 25 | |
| MessengerTrait::messenger | public | function | Gets the messenger. | 25 | |
| MessengerTrait::setMessenger | public | function | Sets the messenger. | ||
| RedirectDestinationTrait::$redirectDestination | protected | property | The redirect destination service. | 2 | |
| RedirectDestinationTrait::getDestinationArray | protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | ||
| RedirectDestinationTrait::getRedirectDestination | protected | function | Returns the redirect destination service. | ||
| RedirectDestinationTrait::setRedirectDestination | public | function | Sets the redirect destination service. | ||
| StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | 3 | |
| StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | ||
| StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | ||
| StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | ||
| StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | 2 | |
| StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. | ||
| SwitchUserController::$account | protected | property | The current user. | ||
| SwitchUserController::$session | protected | property | The session. | ||
| SwitchUserController::$sessionManager | protected | property | The session manager service. | ||
| SwitchUserController::$userStorage | protected | property | The user storage. | ||
| SwitchUserController::create | public static | function | Instantiates a new instance of the implementing class using autowiring. | Overrides AutowireTrait::create | |
| SwitchUserController::switchUser | public | function | Switches to a different user. |