<?php
namespace App\EventListener;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class AuthenticationListener
{
private TokenStorageInterface $tokenStorage;
private AuthorizationCheckerInterface $authorizationChecker;
private EntityManagerInterface $entityManagerInterface;
private UserRepository $userRepository;
public function __construct(TokenStorageInterface $tokenStorage, AuthorizationCheckerInterface $authorizationChecker, EntityManagerInterface $entityManagerInterface, UserRepository $userRepository)
{
$this->tokenStorage = $tokenStorage;
$this->authorizationChecker = $authorizationChecker;
$this->entityManagerInterface = $entityManagerInterface;
$this->userRepository = $userRepository;
}
public function onAuthenticationSuccess(InteractiveLoginEvent $event)
{
// Get the authenticated user
$user = $this->tokenStorage->getToken()->getUser();
if ($this->authorizationChecker->isGranted('ROLE_SUPER_ADMIN')){
$roles[] = 'ROLE_SUPER_ADMIN';
};
if ($this->authorizationChecker->isGranted('ROLE_KEEPER')){
$roles[] = 'ROLE_KEEPER';
};
if ($this->authorizationChecker->isGranted('ROLE_SHOP_ADMIN')){
$roles[] = 'ROLE_SHOP_ADMIN';
};
if ($this->authorizationChecker->isGranted('ROLE_PARTNER_USER')){
$roles[] = 'ROLE_PARTNER_USER';
};
//$user = $this->userRepository->find($user->getId());
//dd($user->getRoles());
// Update the last login date
//dd($roles);
$user->setRoles($roles);
$user->setLastLogin(new \DateTime());
$this->entityManagerInterface->flush();
}
}