vendor/bluue/suppliers-orders-bundle/src/Security/ImportOrderVoter.php line 12

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Bluue\SuppliersOrdersBundle\Security;
  4. use App\Entity\User;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. use Symfony\Component\Security\Core\Security;
  8. class ImportOrderVoter extends Voter
  9. {
  10.     public const ACCESS 'IMPORT_ORDER_ACCESS';
  11.     /**
  12.      * @var Security
  13.      */
  14.     private Security $security;
  15.     /**
  16.      * @param Security $security
  17.      */
  18.     public function __construct(Security $security)
  19.     {
  20.         $this->security $security;
  21.     }
  22.     /**
  23.      * @param string $attribute
  24.      * @param mixed $subject
  25.      * @return bool
  26.      */
  27.     protected function supports(string $attribute$subject): bool
  28.     {
  29.         if ($attribute != self::ACCESS) {
  30.             return false;
  31.         }
  32.         if (!is_object($subject)) {
  33.             return false;
  34.         }
  35.         return true;
  36.     }
  37.     /**
  38.      * @param string $attribute
  39.      * @param mixed $subject
  40.      * @param TokenInterface $token
  41.      * @return bool
  42.      */
  43.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  44.     {
  45.         $user $token->getUser();
  46.         if (!$user instanceof User) {
  47.             return false;
  48.         }
  49.         if ($this->security->isGranted('ROLE__SUPPLIERS__ADMIN')) {
  50.             return true;
  51.         }
  52.         if (!$this->security->isGranted('ROLE__SUPPLIERS__SMALL_ADMIN')) {
  53.             return false;
  54.         }
  55.         if (method_exists($subject'getCreatedBy') && $subject->getCreatedBy()) {
  56.             return $user === $subject->getCreatedBy();
  57.         } else {
  58.             return true;
  59.         }
  60.     }
  61. }