<?php declare(strict_types=1);
namespace App\EventSubscriber;
use App\Entity\User;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Events;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Security;
class AuthorizationSuccessSubscriber implements EventSubscriberInterface
{
private Security $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public static function getSubscribedEvents(): array
{
return [
Events::AUTHENTICATION_SUCCESS => ['addDataToEvent', 10],
];
}
public function addDataToEvent(AuthenticationSuccessEvent $event): void
{
$user = $event->getUser();
$data = $event->getData();
if (!$user instanceof User) {
return;
}
$data['id'] = $user->getSlug();
$data['isAdmin'] = $this->security->isGranted('ROLE_ADMIN');
$data['isManager'] = $this->security->isGranted('ROLE_MASTER_MANAGER');
$data['isMasterManager'] = $this->security->isGranted('ROLE_MASTER_MANAGER');
$data['isDeveloper'] = $this->security->isGranted('ROLE_DEVELOPER');
$event->setData($data);
}
}