src/Application/Symfony/EventSubscriber/Kernel/AccessModuleConformiteSubscriber.php line 57

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the MADIS - RGPD Management application.
  4.  *
  5.  * @copyright Copyright (c) 2018-2019 Soluris - Solutions Numériques Territoriales Innovantes
  6.  * @author ANODE <contact@agence-anode.fr>
  7.  *
  8.  * This program is free software: you can redistribute it and/or modify
  9.  * it under the terms of the GNU Affero General Public License as published by
  10.  * the Free Software Foundation, either version 3 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU Affero General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Affero General Public License
  19.  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  20.  */
  21. declare(strict_types=1);
  22. namespace App\Application\Symfony\EventSubscriber\Kernel;
  23. use App\Domain\Registry\Controller\ConformiteOrganisationController;
  24. use App\Domain\Registry\Controller\ConformiteTraitementController;
  25. use App\Domain\User\Model\User;
  26. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  27. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  28. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  29. use Symfony\Component\HttpKernel\KernelEvents;
  30. use Symfony\Component\Security\Core\Security;
  31. class AccessModuleConformiteSubscriber implements EventSubscriberInterface
  32. {
  33.     /**
  34.      * @var Security
  35.      */
  36.     private $security;
  37.     public function __construct(Security $security)
  38.     {
  39.         $this->security $security;
  40.     }
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [
  44.             KernelEvents::CONTROLLER => [
  45.                 ['onKernelController'],
  46.             ],
  47.         ];
  48.     }
  49.     public function onKernelController(ControllerEvent $event): void
  50.     {
  51.         $controller $event->getController();
  52.         /** @var User|null $user */
  53.         $user $this->security->getUser();
  54.         if (!is_array($controller) || (is_array($controller) && !isset($controller[0])) || \is_null($user)) {
  55.             return;
  56.         }
  57.         if ($this->security->isGranted('ROLE_ADMIN')) {
  58.             return;
  59.         }
  60.         switch (true) {
  61.             case $controller[0] instanceof ConformiteTraitementController
  62.             && !$user->getCollectivity()->isHasModuleConformiteTraitement():
  63.                 throw new AccessDeniedHttpException('You can\'t access to conformite des traitements');
  64.                 break;
  65.             case $controller[0] instanceof ConformiteOrganisationController
  66.             && !$user->getCollectivity()->isHasModuleConformiteOrganisation():
  67.                 throw new AccessDeniedHttpException('You can\'t access to conformite de la structure');
  68.                 break;
  69.         }
  70.     }
  71. }