original_string: private function attemptSwitchUser(Request $request, $username)
      {
          $token = $this->tokenStorage->getToken();
          $originalToken = $this->getOriginalToken($token);
  
          if (null !== $originalToken) {
              if ($token->getUsername() === $username) {
                  return $token;
              }
  
              throw new \LogicException(sprintf('You are already switched to "%s" user.', $token->getUsername()));
          }
  
          $user = $this->provider->loadUserByUsername($username);
  
          if (false === $this->accessDecisionManager->decide($token, [$this->role], $user)) {
              $exception = new AccessDeniedException();
              $exception->setAttributes($this->role);
  
              throw $exception;
          }
  
          if (null !== $this->logger) {
              $this->logger->info('Attempting to switch to user.', ['username' => $username]);
          }
  
          $this->userChecker->checkPostAuth($user);
  
          $roles = $user->getRoles();
          $roles[] = new SwitchUserRole('ROLE_PREVIOUS_ADMIN', $this->tokenStorage->getToken(), false);
  
          $token = new SwitchUserToken($user, $user->getPassword(), $this->providerKey, $roles, $token);
  
          if (null !== $this->dispatcher) {
              $switchEvent = new SwitchUserEvent($request, $token->getUser(), $token);
              $this->dispatcher->dispatch($switchEvent, SecurityEvents::SWITCH_USER);
              // use the token from the event in case any listeners have replaced it.
              $token = $switchEvent->getToken();
          }
  
          return $token;
      }
code: private function attemptSwitchUser(Request $request, $username)
      {
          $token = $this->tokenStorage->getToken();
          $originalToken = $this->getOriginalToken($token);
  
          if (null !== $originalToken) {
              if ($token->getUsername() === $username) {
                  return $token;
              }
  
              throw new \LogicException(sprintf('You are already switched to "%s" user.', $token->getUsername()));
          }
  
          $user = $this->provider->loadUserByUsername($username);
  
          if (false === $this->accessDecisionManager->decide($token, [$this->role], $user)) {
              $exception = new AccessDeniedException();
              $exception->setAttributes($this->role);
  
              throw $exception;
          }
  
          if (null !== $this->logger) {
              $this->logger->info('Attempting to switch to user.', ['username' => $username]);
          }
  
          $this->userChecker->checkPostAuth($user);
  
          $roles = $user->getRoles();
          $roles[] = new SwitchUserRole('ROLE_PREVIOUS_ADMIN', $this->tokenStorage->getToken(), false);
  
          $token = new SwitchUserToken($user, $user->getPassword(), $this->providerKey, $roles, $token);
  
          if (null !== $this->dispatcher) {
              $switchEvent = new SwitchUserEvent($request, $token->getUser(), $token);
              $this->dispatcher->dispatch($switchEvent, SecurityEvents::SWITCH_USER);
              // use the token from the event in case any listeners have replaced it.
              $token = $switchEvent->getToken();
          }
  
          return $token;
      }
code_tokens: private function attemptSwitchUser ( Request $ request , $ username ) { $ token = $ this -> tokenStorage -> getToken ( ) ; $ originalToken = $ this -> getOriginalToken ( $ token ) ; if ( null !== $ originalToken ) { if ( $ token -> getUsername ( ) === $ username ) { return $ token ; } throw new \ LogicException ( sprintf ( 'You are already switched to "%s" user.' , $ token -> getUsername ( ) ) ) ; } $ user = $ this -> provider -> loadUserByUsername ( $ username ) ; if ( false === $ this -> accessDecisionManager -> decide ( $ token , [ $ this -> role ] , $ user ) ) { $ exception = new AccessDeniedException ( ) ; $ exception -> setAttributes ( $ this -> role ) ; throw $ exception ; } if ( null !== $ this -> logger ) { $ this -> logger -> info ( 'Attempting to switch to user.' , [ 'username' => $ username ] ) ; } $ this -> userChecker -> checkPostAuth ( $ user ) ; $ roles = $ user -> getRoles ( ) ; $ roles [ ] = new SwitchUserRole ( 'ROLE_PREVIOUS_ADMIN' , $ this -> tokenStorage -> getToken ( ) , false ) ; $ token = new SwitchUserToken ( $ user , $ user -> getPassword ( ) , $ this -> providerKey , $ roles , $ token ) ; if ( null !== $ this -> dispatcher ) { $ switchEvent = new SwitchUserEvent ( $ request , $ token -> getUser ( ) , $ token ) ; $ this -> dispatcher -> dispatch ( $ switchEvent , SecurityEvents :: SWITCH_USER ) ; // use the token from the event in case any listeners have replaced it. $ token = $ switchEvent -> getToken ( ) ; } return $ token ; }
docstring: Attempts to switch to another user.
  
  @param Request $request  A Request instance
  @param string  $username
  
  @return TokenInterface|null The new TokenInterface if successfully switched, null otherwise
  
  @throws \LogicException
  @throws AccessDeniedException
docstring_tokens: Attempts to switch to another user .