src/Security/Voter/NovalacVoter.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  4. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  5. use Symfony\Component\Security\Core\User\UserInterface;
  6. use App\Manager\Dossier\DossierListManager;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. class NovalacVoter extends Voter
  9. {
  10.     const CAN_SEE_NOVALAC "can_see_novalac";
  11.     const ACTIONS = [
  12.         self::CAN_SEE_NOVALAC
  13.     ];
  14.     const ACCESSIBLE_DOSSIER_IDS = [1];
  15.     private ManagerRegistry $doctrine
  16.     public function __construct(ManagerRegistry $doctrine)
  17.     {
  18.         $this->doctrine $doctrine;  // Stockage de la dépendance dans une propriété privée
  19.     }
  20.     protected function supports(string $attribute$subject): bool
  21.     {
  22.         return in_array($attributeself::ACTIONS);
  23.     }
  24.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  25.     {
  26.         $user $token->getUser();
  27.     
  28.         switch ($attribute) {
  29.             case self::CAN_SEE_NOVALAC:
  30.                 return $this->canSeeNovalac($user$subject);
  31.                 break;
  32.             default:
  33.                 throw new \LogicException('This code should not be reached!');
  34.                 break;
  35.         }
  36.         return false;
  37.     }
  38.     // Vérifie si l'utilisateur peut accéder à l'astreinte Viria
  39.     private function canSeeNovalac(UserInterface $user$subject): bool
  40.     {
  41.         $em $this->doctrine->getManager();
  42.         $dossiers DossierListManager::getDossierByCompteClientDQL($em$user->getId());
  43.         if (empty($dossiers)) {
  44.             return false;
  45.         }
  46.         foreach ($dossiers as $dossier) {
  47.             if (in_array($dossier->getIdDossier(), self::ACCESSIBLE_DOSSIER_IDS)) {
  48.                 return true;
  49.             }
  50.         }
  51.         return false;
  52.     }
  53. }