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($attribute, self::ACTIONS);
  23. }
  24. protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
  25. {
  26. $user = $token->getUser();
  27. switch ($attribute) {
  28. case self::CAN_SEE_NOVALAC:
  29. return $this->canSeeNovalac($user, $subject);
  30. break;
  31. default:
  32. throw new \LogicException('This code should not be reached!');
  33. break;
  34. }
  35. return false;
  36. }
  37. // Vérifie si l'utilisateur peut accéder à l'astreinte Viria
  38. private function canSeeNovalac(UserInterface $user, $subject): bool
  39. {
  40. $em = $this->doctrine->getManager();
  41. $dossiers = DossierListManager::getDossierByCompteClientDQL($em, $user->getId());
  42. if (empty($dossiers)) {
  43. return false;
  44. }
  45. foreach ($dossiers as $dossier) {
  46. if (in_array($dossier->getIdDossier(), self::ACCESSIBLE_DOSSIER_IDS)) {
  47. return true;
  48. }
  49. }
  50. return false;
  51. }
  52. }