src/Infrastructure/Security/Voter/OrderVoter.php line 13

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Infrastructure\Security\Voter;
  4. use App\Domain\Cart\DTO\Factory\CartDTOFactory;
  5. use App\Domain\Common\Entity\IzOrderClient;
  6. use App\Domain\Common\Repository\CartRepository;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. final class OrderVoter extends Voter
  10. {
  11.     public const VALIDATION 'ORDER_VALIDATION';
  12.     private CartRepository $cartRepository;
  13.     private CartDTOFactory $cartFactory;
  14.     public function __construct(
  15.         CartRepository $cartRepository,
  16.         CartDTOFactory $cartFactory
  17.     ) {
  18.         $this->cartRepository $cartRepository;
  19.         $this->cartFactory $cartFactory;
  20.     }
  21.     protected function supports(string $attribute$subject): bool
  22.     {
  23.         return self::VALIDATION === $attribute;
  24.     }
  25.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  26.     {
  27.         $client $token->getUser();
  28.         if (!$client instanceof IzOrderClient) {
  29.             return false;
  30.         }
  31.         $cartProducts $this->cartRepository->findForSelf();
  32.         if (empty($cartProducts)) {
  33.             return false;
  34.         }
  35.         return $this->cartFactory->build()->getTotalAmount() >= $client->getFranco();
  36.     }
  37. }