src/Security/Voter/VideosVoter.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Etablissement;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. use Symfony\Component\Security\Core\Security;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. class VideosVoter extends Voter
  9. {
  10.     public const LIST = 'list';
  11.     public const ADD 'add';
  12.     public const EDIT 'edit';
  13.     public const DELETE 'delete';
  14.     private $security;
  15.     public function __construct(Security $security)
  16.     {
  17.         $this->security $security;
  18.     }
  19.     protected function supports($attribute$subject): bool
  20.     {
  21.         if ($subject instanceof Etablissement) {
  22.             return \in_array($attribute, [
  23.                 self::ADD,
  24.                 self::EDIT,
  25.                 self::DELETE,
  26.             ], true);
  27.         } else {
  28.             return 'vidPlus' === $subject &&
  29.                 \in_array($attribute, [self::ADD], true);
  30.         }
  31.     }
  32.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  33.     {// Utilisateur doit être authentifié
  34.         if (!$token->getUser() instanceof UserInterface) {
  35.             return false;
  36.         }
  37.         if ($this->security->isGranted('ROLE_ADMIN')) {
  38.             return true;
  39.         }
  40.         switch ($attribute) {
  41.             case self::DELETE:
  42.             case self::ADD:
  43.             case self::EDIT:
  44.             return $this->security->isGranted('ROLE_RESPONSABLE_ETABLISSEMENT') ||
  45.                 $this->security->isGranted('ROLE_COMMUNICATION') ||
  46.                 $this->security->isGranted('ROLE_GESTIONNAIRE_ESPACE_ETABLISSEMENT');
  47.         }
  48.         return false;
  49.     }
  50. }