src/Security/ProfitCalculator/ResearchCalculationVoter.php line 15

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