src/Http/Api/Voter/VersionVoter.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Http\Api\Voter;
  3. use App\Domain\Project\Entity\Version;
  4. use App\Domain\User\Entity\User;
  5. use JetBrains\PhpStorm\Pure;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  9. class VersionVoter extends Voter
  10. {
  11.     const DOWNLOAD 'DOWNLOAD_PROJECT';
  12.     protected function voteOnAttribute(string $attributemixed $subjectTokenInterface $token): bool
  13.     {
  14.         if(!($subject instanceof Version)) return false;
  15.         /** @var User $user */
  16.         $user $token->getUser();
  17.         switch ($attribute) {
  18.             case self::DOWNLOAD:
  19.                 return $this->canAccessVersion($subject$user);
  20.             default: return false;
  21.         }
  22.     }
  23.     private function canAccessVersion(Version $versionUser $user): bool
  24.     {
  25.         return $version->getProject()->getCompany() === $user->getCompany();
  26.     }
  27.     protected function supports(string $attributemixed $subject): bool
  28.     {
  29.         return in_array($attribute, [self::DOWNLOAD]);
  30.     }
  31. }