src/Security/Voter/CommandOrderVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\User;
  4. use App\Security\NoOriginalTokenException;
  5. use App\Security\OriginalTokenProvider;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class CommandOrderVoter extends Voter
  10. {
  11.     public const IMPORT 'command_order_import';
  12.     private $originalTokenProvider;
  13.     public function __construct(OriginalTokenProvider $originalTokenProvider)
  14.     {
  15.         $this->originalTokenProvider $originalTokenProvider;
  16.     }
  17.     protected function supports($attribute$subject)
  18.     {
  19.         $currentUser $this->originalTokenProvider->getCurrentToken()->getUser();
  20.         if (false === $currentUser instanceof UserInterface) {
  21.             return false;
  22.         }
  23.         return self::IMPORT === $attribute;
  24.     }
  25.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  26.     {
  27.         try {
  28.             return $this->voteForOriginalUser($attribute);
  29.         } catch (NoOriginalTokenException $exception) {
  30.             return $this->voteForCurentUser($attribute$token);
  31.         }
  32.     }
  33.     private function voteForOriginalUser(string $attribute): bool
  34.     {
  35.         $originalUser $this->originalTokenProvider->getOriginalUser();
  36.         return $this->voteForUser($attribute$originalUser);
  37.     }
  38.     private function voteForCurentUser(string $attributeTokenInterface $token): bool
  39.     {
  40.         $currentUSer $token->getUser();
  41.         if (!$currentUSer instanceof User) {
  42.             return false;
  43.         }
  44.         return $this->voteForUser($attribute$currentUSer);
  45.     }
  46.     private function voteForUser(string $attributeUserInterface $user): bool
  47.     {
  48.         if (self::IMPORT === $attribute && $this->canImport($user)) {
  49.             return true;
  50.         }
  51.         return false;
  52.     }
  53.     protected function canImport(UserInterface $user): bool
  54.     {
  55.         return $user->isAnAdmin();
  56.     }
  57. }