<?php
//----------------------------------------------------------------------
// src/Services/AccessTools.php
//----------------------------------------------------------------------
namespace App\Services;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
use Symfony\Component\Security\Core\Security;
use App\Entity\Access;
class AccessTools
{
public function __construct(ManagerRegistry $doctrine, Security $security)
{
$this->em = $doctrine->getManager();
$this->security = $security;
}
public function getCurrentUser()
{
$access = $this->security->getUser();
if (empty($access))
{
$access = $this->em->getRepository(Access::class)->findOneByEmail(Access::EMPTY_ACCESS);
}
return $access;
}
// https://symfony.com/doc/5.4/security/impersonating_user.html
// This is also in AccessTools
// This is also in LogTools
public function getOriginalUser()
{
$originalUser = null;
// #3251 Fix to avoid infinity loop
$currentUser = $this->getCurrentUser();
if ($currentUser === null || $currentUser->getEmail() == Access::EMPTY_ACCESS)
{
return null;
}
$token = $this->security->getToken();
if ($token instanceof SwitchUserToken)
{
$originalUser = $token->getOriginalToken()->getUser();
}
return $originalUser;
}
}