vendor/sylius/sylius/src/Sylius/Bundle/UserBundle/EventListener/UserDeleteListener.php line 39

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Sylius package.
  4.  *
  5.  * (c) Paweł Jędrzejewski
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace Sylius\Bundle\UserBundle\EventListener;
  12. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  13. use Sylius\Component\User\Model\UserInterface;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  16. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  17. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  18. use Webmozart\Assert\Assert;
  19. final class UserDeleteListener
  20. {
  21.     private TokenStorageInterface $tokenStorage;
  22.     private SessionInterface $session;
  23.     public function __construct(TokenStorageInterface $tokenStorageSessionInterface $session)
  24.     {
  25.         $this->tokenStorage $tokenStorage;
  26.         $this->session $session;
  27.     }
  28.     /**
  29.      * @throws \InvalidArgumentException
  30.      */
  31.     public function deleteUser(ResourceControllerEvent $event): void
  32.     {
  33.         $user $event->getSubject();
  34.         Assert::isInstanceOf($userUserInterface::class);
  35.         if ($this->isTryingToDeleteLoggedInUser($user)) {
  36.             $event->stopPropagation();
  37.             $event->setErrorCode(Response::HTTP_UNPROCESSABLE_ENTITY);
  38.             $event->setMessage('Cannot remove currently logged in user.');
  39.             /** @var FlashBagInterface $flashBag */
  40.             $flashBag $this->session->getBag('flashes');
  41.             $flashBag->add('error''Cannot remove currently logged in user.');
  42.         }
  43.     }
  44.     private function isTryingToDeleteLoggedInUser(UserInterface $user): bool
  45.     {
  46.         $token $this->tokenStorage->getToken();
  47.         if (!$token) {
  48.             return false;
  49.         }
  50.         $loggedUser $token->getUser();
  51.         if (!$loggedUser) {
  52.             return false;
  53.         }
  54.         /** @var UserInterface $loggedUser */
  55.         return $loggedUser->getId() === $user->getId() && $loggedUser->getRoles() === $user->getRoles();
  56.     }
  57. }