src/Services/AccessTools.php line 18

Open in your IDE?
  1. <?php
  2. //----------------------------------------------------------------------
  3. // src/Services/AccessTools.php
  4. //----------------------------------------------------------------------
  5. namespace App\Services;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  8. use Symfony\Component\Security\Core\Security;
  9. use App\Entity\Access;
  10. class AccessTools
  11. {
  12.     public function __construct(ManagerRegistry $doctrineSecurity $security)
  13.     {
  14.         $this->em $doctrine->getManager();
  15.         $this->security $security;
  16.     }
  17.     public function getCurrentUser()
  18.     {
  19.         $access $this->security->getUser();
  20.         if (empty($access))
  21.         {
  22.             $access $this->em->getRepository(Access::class)->findOneByEmail(Access::EMPTY_ACCESS);
  23.         }
  24.         return $access;
  25.     }
  26.     // https://symfony.com/doc/5.4/security/impersonating_user.html
  27.     // This is also in AccessTools
  28.     // This is also in LogTools
  29.     public function getOriginalUser()
  30.     {
  31.         $originalUser null;
  32.         // #3251 Fix to avoid infinity loop
  33.         $currentUser $this->getCurrentUser();
  34.         if ($currentUser === null || $currentUser->getEmail() == Access::EMPTY_ACCESS)
  35.         {
  36.             return null;
  37.         }
  38.         $token $this->security->getToken();
  39.         if ($token instanceof SwitchUserToken)
  40.         {
  41.             $originalUser $token->getOriginalToken()->getUser();
  42.         }
  43.         return $originalUser;
  44.     }
  45. }