src/Security/MediaVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\Media;
  4. use App\Entity\User;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. class MediaVoter extends Voter
  8. {
  9.     const VIEW 'view';
  10.     protected function supports(string $attribute$subject)
  11.     {
  12.         if (!in_array($attribute, [self::VIEW])) {
  13.             return false;
  14.         }
  15.         if (!$subject instanceof Media) {
  16.             return false;
  17.         }
  18.         return true;
  19.     }
  20.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token)
  21.     {
  22.         $user $token->getUser();
  23.         if (!$user instanceof User) {
  24.             // the user must be logged in; if not, deny access
  25.             return false;
  26.         }
  27.         /** @var Media $media */
  28.         $media $subject;
  29.         switch ($attribute) {
  30.             case self::VIEW:
  31.                 return $this->canView($media$user);
  32.         }
  33.     }
  34.     private function canView(Media $mediaUser $user)
  35.     {
  36.         return $media->canUserView($user);
  37.     }
  38. }