src/Security/Voter/DirectionVoter.php line 11
<?phpnamespace App\Security\Voter;use App\Entity\Admin\Parameter\Direction as ParameterDirection;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use App\Entity\Direction;use Symfony\Component\Security\Core\Authorization\Voter\Voter;use Symfony\Component\Security\Core\User\UserInterface;class DirectionVoter extends Voter{public const EDIT = 'POST_EDIT';public const VIEW = 'POST_VIEW';public const IS_DIRECTOR = 'IS_DIRECTOR';protected function supports(string $attribute, mixed $subject): bool{// Vérifie si l'attribut correspond à ceux gérés par ce voterif (in_array($attribute, [self::EDIT, self::VIEW])) {return $subject instanceof ParameterDirection;}return $attribute === self::IS_DIRECTOR;}protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool{$user = $token->getUser();// Si l'utilisateur n'est pas connecté, il n'a aucun droitif (!$user instanceof UserInterface) {return false;}switch ($attribute) {case self::EDIT:return $this->canEdit($user, $subject);case self::VIEW:return $this->canView($user, $subject);case self::IS_DIRECTOR:return $this->isDirector($user);}return false;}private function canEdit(UserInterface $user, Direction $direction): bool{// Vérifie si l'utilisateur est le directeur de la direction donnéereturn $direction->getDirector() === $user;}private function canView(UserInterface $user, Direction $direction): bool{// Exemple simple : tout le monde peut voirreturn true;}private function isDirector(UserInterface $user): bool{// Vérifie si l'utilisateur est directeur d'au moins une directionreturn method_exists($user, 'getDirections') && !$user->getDirections()->isEmpty();}}