<?php
namespace App\Security;
use App\Entity\UserAccess;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class UserPageAccessSubscriber implements EventSubscriberInterface
{
private $security;
private $entityManager;
private $urlGenerator;
public function __construct(Security $security, EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator)
{
$this->security = $security;
$this->entityManager = $entityManager;
$this->urlGenerator = $urlGenerator;
}
// public function onKernelRequest(RequestEvent $event)
// {
// $request = $event->getRequest();
// $user = $this->security->getUser();
// $route = $request->attributes->get('_route');
// $permissions = $this->entityManager->getRepository(UserAccess::class)->findOneBy(['user' => $user]);
//
// if ($permissions && !$this->security->isGranted('ROLE_ADMIN') && $route != 'app_login') {
// $permissionsActions = $permissions->getPermission();
//
// if (!in_array($route, $permissionsActions)) {
// $url = $this->urlGenerator->generate('app_404page');
// $response = new RedirectResponse($url);
// $event->setResponse($response);
// }
// }
// }
// public function onKernelRequest(RequestEvent $event)
// {
// $request = $event->getRequest();
// $user = $this->security->getUser();
// $route = $request->attributes->get('_route');
//
// if ($route === 'app_404page') {
// return; // Évitez de rediriger encore vers la page 404
// }
//
// $permissions = $this->entityManager->getRepository(UserAccess::class)->findOneBy(['user' => $user]);
//
// if ($permissions && !$this->security->isGranted('ROLE_ADMIN') && $route != 'app_login') {
// $permissionsActions = $permissions->getPermission();
//
// if (!in_array($route, $permissionsActions)) {
// $response = new RedirectResponse($this->urlGenerator->generate('app_404page'));
// $event->setResponse($response);
// }
// }
// }
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
$user = $this->security->getUser();
$route = $request->attributes->get('_route');
// if ($route === 'app_404page') {
// return; // Évitez de rediriger encore vers la page 404
// }
//
// $permissions = $this->entityManager->getRepository(UserAccess::class)->findOneBy(['user' => $user]);
//
// if ($permissions && !$this->security->isGranted('ROLE_ADMIN') && $route != 'app_login') {
// $permissionsActions = $permissions->getPermission();
//
// if (!in_array($route, $permissionsActions)) {
// $response = new RedirectResponse($this->urlGenerator->generate('app_404page'));
// $event->setResponse($response);
// }
// }
}
public static function getSubscribedEvents()
{
return [
RequestEvent::class => 'onKernelRequest',
];
}
}