src/Security/Voter/UtilisateurVoter.php line 12
<?phpnamespace App\Security\Voter;use App\Entity\Utilisateur;use App\Service\UtilisateurService;use Symfony\Bundle\SecurityBundle\Security;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Symfony\Component\Security\Core\Authorization\Voter\Voter;use Symfony\Component\Security\Core\User\UserInterface;class UtilisateurVoter extends Voter{private $security;private $utilisateurService;public const EDIT = 'UTILISATEUR_EDIT';public const VIEW = 'UTILISATEUR_VIEW';public function __construct(Security $security, UtilisateurService $utilisateurService){$this->security = $security;$this->utilisateurService = $utilisateurService;}protected function supports(string $attribute, mixed $subject): bool{// replace with your own logic// https://symfony.com/doc/current/security/voters.htmlreturn in_array($attribute, [self::EDIT, self::VIEW])&& $subject instanceof \App\Entity\Utilisateur;}protected function voteOnAttribute(string $attribute, mixed $utilisateur, TokenInterface $token): bool{/** @var Utilisateur $user */$user = $token->getUser();// if the user is anonymous, do not grant accessif (!$user instanceof UserInterface) {return false;}// ROLE_SUPERADMIN > ROLE_ADMINif ($this->security->isGranted('ROLE_ADMIN')) {return true;}$employes = $this->utilisateurService->getEmployes($user);/** @var Utilisateur $utilisateur */// ... (check conditions and return true to grant permission) ...switch ($attribute) {case self::EDIT:case self::VIEW:// logic to determine if the user can EDIT or VIEW// return true or falseif ($this->security->isGranted('ROLE_GROUPE')) {if ($employes[$utilisateur->getRole()->value]->contains($utilisateur)) {return true;}return false;}if ($this->security->isGranted('ROLE_ORGANISME')) {if ($employes[$utilisateur->getRole()->value]->contains($utilisateur)) {return true;}return false;}if ($this->security->isGranted('ROLE_ETABLISSEMENT')) {if ($employes[$utilisateur->getRole()->value]->contains($utilisateur)) {return true;}return false;}break;}return false;}}