src/Security/Voter/EliteVoter.php line 15

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author      Mehrez Labidi
  5.  */
  6. namespace App\Security\Voter;
  7. use App\Services\Annonces\Elites\RechercheElite;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use App\Services\ManagerEntity\DroitsAccesManagers;
  12. use Symfony\Component\Security\Core\Security;
  13. class EliteVoter extends Voter {
  14.     public const ROLE_ELITE 'ROLE_ELITE';
  15.     private $dam;
  16.     private $requestStack;
  17.     /**
  18.      * Initialise le voter avec les dépendances nécessaires.
  19.      *
  20.      * @param Security            $security     Service de sécurité Symfony
  21.      * @param DroitsAccesManagers $dam          Gestionnaire des droits d'accès aux services
  22.      * @param RequestStack        $requestStack Pile des requêtes HTTP courantes
  23.      */
  24.     public function __construct(Security $securityDroitsAccesManagers $damRequestStack $requestStack) {
  25.         $this->security $security;
  26.         $this->dam $dam;
  27.         $this->requestStack $requestStack;
  28.     }
  29.     /**
  30.      * Détermine si ce voter prend en charge l'attribut donné.
  31.      *
  32.      * @param  string $attribute L'attribut de sécurité à vérifier
  33.      * @param  mixed  $subject   Le sujet associé à la vérification (non utilisé ici)
  34.      * @return bool   True si l'attribut correspond à ROLE_ELITE
  35.      */
  36.     protected function supports(string $attribute$subject): bool {
  37.         return $attribute === self::ROLE_ELITE;
  38.     }
  39.     /**
  40.      * Vérifie si l'utilisateur connecté possède le droit d'accès au service Elite.
  41.      *
  42.      * @param  string         $attribute L'attribut de sécurité à évaluer
  43.      * @param  mixed          $subject   Le sujet associé (non utilisé ici)
  44.      * @param  TokenInterface $token     Le token d'authentification de l'utilisateur courant
  45.      * @return bool           True si l'utilisateur dispose du droit Elite, false sinon
  46.      */
  47.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool {
  48.         $request $this->requestStack->getCurrentRequest();
  49.         if (!$request || !$this->security->getUser()) {
  50.             return false;
  51.         }
  52.         try {
  53.             $accesElite $this->dam->checkIfThisUserHasDroitService($this->security->getUser(), RechercheElite::CODE_SERVICE);
  54.             return $accesElite;
  55.         } catch (\Exception $e) {
  56.             return false;
  57.         }
  58.     }
  59. }