src/EventSubscriber/RouteAccessSubscriber.php line 28

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Repository\DroitUserRepository;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\Routing\RouterInterface;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Security\Core\Security;
  11. class RouteAccessSubscriber implements EventSubscriberInterface
  12. {
  13.     public function __construct(private Security $security, private DroitUserRepository $droitUserRepository)
  14.     {
  15.     }
  16.     public static function getSubscribedEvents(): array
  17.     {
  18.         return [
  19.             KernelEvents::REQUEST => 'onKernelRequest',
  20.         ];
  21.     }
  22.     public function onKernelRequest(RequestEvent $event): void
  23.     {
  24.         // Get the current user
  25.         $user $this->security->getUser();
  26.         if ($user) {
  27.             // Get the current route name
  28.             $currentRoute $event->getRequest()->attributes->get('_route');;
  29.             $defaultRoutes = [
  30.                 'resetuserPassword''app_firstpage''app_dashboard''my_profile''app_user_resetpasswordPerson','app_notification_full','app_getuser_currency_balance','app_ajax_getTranasctioDetail','app_ajax_filterCourseForRegistration','getPersonneDetails','studentdynamicSelect2Filter','studentAcitveSelect2Filter','studentdynamicFilter','app_user_activer_action_lie','app_user_ajouter_droit','app_fonction_activer_action_lie','app_fonction_ajouter_action','app_fees_audit','filterScoreboardStudentByDepartmentNlevel','showLecturerAttendance','getStudentInfo','saveStudentTempFiles','remove_courrier_file','apercuFichier','getfeeTypes','getAttendanceInfo','app_exams_delete','app_ajaxEditTempExamQuestion','app_ajaxSaveTempExamQuestion','app_scheduled_filter'
  31.             ];
  32.             $assignedRoutes array_merge($this->droitUserRepository->getAssignedRoutes($user), $defaultRoutes);
  33.             
  34.             // Allow only API routes and Super Admin have access to everything
  35.             if (substr($currentRoute08) !== 'app_api_' && !in_array('ROLE_SUPER_ADMIN'$user->getRoles())) {
  36.                 if (!in_array('ROLE_AGENT'$user->getRoles()) || !in_array('ROLE_STUDENT'$user->getRoles()) || !in_array('ROLE_LECTURER'$user->getRoles())) {
  37.             // dd($assignedRoutes);
  38.             $blockAccess in_array($currentRoute$assignedRoutes) || $currentRoute === null;
  39.                     if ($blockAccess === false) {
  40.                         $response = new Response('No permission to access this page.'Response::HTTP_FORBIDDEN);
  41.                         $event->setResponse($response);
  42.                     }
  43.                 }
  44.             }
  45.         }
  46.     }
  47. }