src/Security/PurchaseOrdering/PurchaseOrderVoter.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Security\PurchaseOrdering;
  3. use App\Entity\PurchaseOrdering\PurchaseOrder;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. /**
  7.  * Class PurchaseOrderVoter
  8.  * @package App\Security\PurchaseOrdering
  9.  */
  10. class PurchaseOrderVoter extends Voter
  11. {
  12.     const EDIT   'edit';
  13.     const VIEW   'view';
  14.     const DELETE 'delete';
  15.     /**
  16.      * base voter actions
  17.      */
  18.     private const ATTRIBUTES = [
  19.         self::EDIT,
  20.         self::VIEW,
  21.         self::DELETE
  22.     ];
  23.     /**
  24.      * @param string $attribute
  25.      * @param mixed  $subject
  26.      *
  27.      * @return bool
  28.      */
  29.     protected function supports($attribute$subject)
  30.     {
  31.         return $subject instanceof PurchaseOrder
  32.             && in_array($attributeself::ATTRIBUTES);
  33.     }
  34.     /**
  35.      * @param                $attribute
  36.      * @param PurchaseOrder  $purchaseOrder
  37.      * @param TokenInterface $token
  38.      *
  39.      * @return bool
  40.      */
  41.     protected function voteOnAttribute(
  42.         $attribute,
  43.         $purchaseOrder,
  44.         TokenInterface $token
  45.     ) {
  46.         switch ($attribute) {
  47.             case self::EDIT:
  48.             case self::DELETE:
  49.             case self::VIEW:
  50.                 return $purchaseOrder->getUser() == $token->getUser();
  51.                 break;
  52.         }
  53.         throw new \LogicException('Invalid attribute: ' $attribute);
  54.     }
  55. }