src/Security/Voter/UtilisateurVoter.php line 13
<?phpnamespace App\Security\Voter;use App\Entity\Utilisateur;use App\Entity\Structure;use App\Entity\Professionnel;use App\Repository\LicenceRepository;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 $licenceRepository;public const DROIT_STRUCTURE = 'DROIT_STRUCTURE';public const DROIT_PROFESSIONNEL = 'DROIT_PROFESSIONNEL';public const DROIT_GESTION_PROFESSIONNEL = 'DROIT_GESTION_PROFESSIONNEL';public function __construct(LicenceRepository $licenceRepository){$this->licenceRepository = $licenceRepository;}protected function supports(string $attribute, mixed $subject): bool{return in_array($attribute, [self::DROIT_STRUCTURE,self::DROIT_PROFESSIONNEL,self::DROIT_GESTION_PROFESSIONNEL]);}protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool{$user = $token->getUser();// if the user is anonymous, do not grant accessif (!$user instanceof UserInterface) {return false;}// ... (check conditions and return true to grant permission) ...switch ($attribute) {case self::DROIT_STRUCTURE:if (!$subject instanceof Structure) {throw new \Exception('Le sujet n\'est pas une instance \\App\\Entity\\Structure. Objet de la classe ' . get_class($subject) . ' fourni');}if (in_array(Utilisateur::ROLE_SUPERADMIN, $user->getRoles())) {return true;} else {return ($user->getStructure() == $subject);}break;case self::DROIT_PROFESSIONNEL:if (!$subject instanceof \Symfony\Component\HttpFoundation\Request && !is_int($subject) ) {throw new \Exception('Le sujet n\'est pas une instance \\Symfony\\Component\\HttpFoundation\\Request ni un entier. Objet de la classe ' . get_class($subject) . ' fourni');}if (in_array(Utilisateur::ROLE_SUPERADMIN, $user->getRoles())) {return true;} else {return ( ( ( is_int($subject) && $user->getStructure()->getId() == $subject ) )|| (( null != $subject->get('structure') ) && ( $user->getStructure()->getId() == $subject->get('structure') ) ) );}break;case self::DROIT_GESTION_PROFESSIONNEL:if (!$subject instanceof Professionnel) {throw new \Exception('Le sujet n\'est pas une instance \\App\\Entity\\Professionnel. Objet de la classe ' . get_class($subject) . ' fourni');}if (in_array(Utilisateur::ROLE_SUPERADMIN, $user->getRoles())) {return true;} else {return ( NULL != $this->licenceRepository->findOneBy(['professionnel' => $subject, 'structure' => $user->getStructure()]) );}break;}return false;}}