src/EventSubscribers/RoleChangeSubscriber.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscribers;
  3. use App\Entity\Portal\User;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  11. class RoleChangeSubscriber implements EventSubscriberInterface {
  12.     /**
  13.      * @var TokenStorage
  14.      */
  15.     protected $tokenStorage;
  16.     /**
  17.      * YourRoleListener constructor.
  18.      * @param TokenStorage  $tokenStorage  The token storage for the user
  19.      */
  20.     public function __construct(TokenStorageInterface $tokenStorage) {
  21.         $this->tokenStorage $tokenStorage;
  22.     }
  23.     /**
  24.      * Handles the kernel event.
  25.      *
  26.      * @param ControllerEvent $event The dispatched event
  27.      */
  28.     public function onKernelController(ControllerEvent $event) {
  29.         if ($this->tokenStorage && $this->tokenStorage->getToken() && !($this->tokenStorage->getToken() instanceof SwitchUserToken)) {
  30.             $token $this->tokenStorage->getToken();
  31.             $user $token->getUser();
  32.             // This check can be just `is_object` like in symfony core
  33.             // we're explicit about the class used
  34.             if ($user instanceof User) {
  35.                 // there didn't seem to be an easier way to grab the provider key,
  36.                 // so using bound closure to retrieve it
  37.                 $providerKeyGetter = function (TokenInterface $token) {
  38.                     return $token->getFirewallName();
  39.                 };
  40.                 $boundProviderKeyGetter = \Closure::bind($providerKeyGetternull$token);
  41.                 // check & load roles for user here if necessary
  42.                 // $this->tokenStorage->setToken(
  43.                 //         new UsernamePasswordToken(
  44.                 //                 $user,
  45.                 //                 $token->getCredentials(),
  46.                 //                 $boundProviderKeyGetter($token),
  47.                 //                 $user->getRoles()
  48.                 //         )
  49.                 // );
  50.             }
  51.         }
  52.     }
  53.     /** {@inheritdoc} */
  54.     public static function getSubscribedEvents() {
  55.         return [KernelEvents::CONTROLLER => ['onKernelController'99]];
  56.     }
  57. }