<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Security\Voter;
use App\Services\Annonces\Elites\RechercheElite;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\HttpFoundation\RequestStack;
use App\Services\ManagerEntity\DroitsAccesManagers;
use Symfony\Component\Security\Core\Security;
class EliteVoter extends Voter {
public const ROLE_ELITE = 'ROLE_ELITE';
private $dam;
private $requestStack;
/**
* Initialise le voter avec les dépendances nécessaires.
*
* @param Security $security Service de sécurité Symfony
* @param DroitsAccesManagers $dam Gestionnaire des droits d'accès aux services
* @param RequestStack $requestStack Pile des requêtes HTTP courantes
*/
public function __construct(Security $security, DroitsAccesManagers $dam, RequestStack $requestStack) {
$this->security = $security;
$this->dam = $dam;
$this->requestStack = $requestStack;
}
/**
* Détermine si ce voter prend en charge l'attribut donné.
*
* @param string $attribute L'attribut de sécurité à vérifier
* @param mixed $subject Le sujet associé à la vérification (non utilisé ici)
* @return bool True si l'attribut correspond à ROLE_ELITE
*/
protected function supports(string $attribute, $subject): bool {
return $attribute === self::ROLE_ELITE;
}
/**
* Vérifie si l'utilisateur connecté possède le droit d'accès au service Elite.
*
* @param string $attribute L'attribut de sécurité à évaluer
* @param mixed $subject Le sujet associé (non utilisé ici)
* @param TokenInterface $token Le token d'authentification de l'utilisateur courant
* @return bool True si l'utilisateur dispose du droit Elite, false sinon
*/
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool {
$request = $this->requestStack->getCurrentRequest();
if (!$request || !$this->security->getUser()) {
return false;
}
try {
$accesElite = $this->dam->checkIfThisUserHasDroitService($this->security->getUser(), RechercheElite::CODE_SERVICE);
return $accesElite;
} catch (\Exception $e) {
return false;
}
}
}