Namespace
Drupal\devel\Controller
File
-
src/Controller/SwitchUserController.php
View source
<?php
namespace Drupal\devel\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\Core\Session\SessionManagerInterface;
use Drupal\user\UserStorageInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
class SwitchUserController extends ControllerBase {
protected AccountProxyInterface $account;
protected UserStorageInterface $userStorage;
protected SessionManagerInterface $sessionManager;
protected Session $session;
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;
}
public function switchUser(?string $name = NULL) {
if (empty($name) || !$account = $this->userStorage
->loadByProperties([
'name' => $name,
])) {
throw new AccessDeniedHttpException();
}
$account = reset($account);
$this->moduleHandler
->invokeAll('user_logout', [
$this->account,
]);
$this->sessionManager
->regenerate();
$this->account
->setAccount($account);
$this->session
->set('uid', $account->id());
$this->moduleHandler
->invokeAll('user_login', [
$account,
]);
return $this->redirect('<front>');
}
}
Classes