<?phpnamespace App\EventSubscriber;use App\Entity\Account;use App\Entity\AccountPro;use App\Entity\Organization;use App\Service\Security;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpKernel\Event\ControllerEvent;use Symfony\Component\HttpKernel\KernelEvents;use Symfony\Component\Routing\RouterInterface;use function in_array;class Firewall implements EventSubscriberInterface{ protected Security $security; protected RouterInterface $router; public function __construct(Security $security, RouterInterface $router) { $this->security = $security; $this->router = $router; } public static function getSubscribedEvents(): array { return [ KernelEvents::CONTROLLER => 'onKernelController', ]; } public function onKernelController(ControllerEvent $event) { $controller = \is_array($event->getController()) ? $event->getController()[0] : $event->getController(); // Récupère l'utilisateur en session $user = $this->security->getUser(); $organization = $this->security->getOrganization(); // Firewall pour la partie App if (str_starts_with(\get_class($controller), 'App\Controller\App\\')) { // On redirige si aucune session n'est montée if (!$user instanceof Account) { $event->setController(function () { return new RedirectResponse($this->router->generate('home')); }); return; } } // Firewall pour la partie Daily if (str_starts_with(\get_class($controller), 'App\Controller\Daily\\')) { // On redirige si aucune session n'est montée if (!$user instanceof Account) { $event->setController(function () { return new RedirectResponse($this->router->generate('home')); }); return; } } // Firewall pour la partie Pro if (str_starts_with(\get_class($controller), 'App\Controller\Pro\\')) { // On redirige si aucune session n'est montée if (!$user instanceof AccountPro) { $event->setController(function () { return new RedirectResponse($this->router->generate('home')); }); return; } } // Firewall pour la partie Admin if (str_starts_with(\get_class($controller), 'App\Controller\Admin\\')) { // On redirige si aucune session n'est montée if (!$user instanceof Account) { $event->setController(function () { return new RedirectResponse($this->router->generate('home')); }); return; } // On redirige si on n'a pas le rôle admin if (!in_array('ROLE_ADMIN', $user->getRoles(), true)) { return new RedirectResponse($this->router->generate('home')); } } // Firewall pour la partie Manager if (str_starts_with(\get_class($controller), 'App\Controller\Manager\\')) { // On redirige si aucune session n'est montée if (!$organization instanceof Organization) { $event->setController(function () { return new RedirectResponse($this->router->generate('home')); }); return; } } }}