src/Voter/PartnerVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Voter;
  3. use App\Entity\Partner\PartnerCompanyDiscount;
  4. use Crea\SecurityBundle\Entity\User;
  5. use Crea\SecurityBundle\Entity\UserInterface;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. class PartnerVoter extends Voter
  9. {
  10.     const LIST = "PARTNER_LIST";
  11.     const DETAIL "PARTNER_DETAIL";
  12.     const CREATE "PARTNER_CREATE";
  13.     const UPDATE "PARTNER_UPDATE";
  14.     const REMOVE "PARTNER_REMOVE";
  15.     const SWITCH_ACTIVE "PARTNER_SWITCH_ACTIVE";
  16.     const DISCOUNT_LIST "PARTNER_DISCOUNT_LIST";
  17.     const DISCOUNT_CREATE "PARTNER_DISCOUNT_CREATE";
  18.     const DISCOUNT_UPDATE "PARTNER_DISCOUNT_UPDATE";
  19.     const DISCOUNT_UPDATE_FORCE "PARTNER_DISCOUNT_UPDATE_FORCE";
  20.     const DISCOUNT_DELETE "PARTNER_DISCOUNT_DELETE";
  21.     const COMMERCIAL_FOLLOW_UP_LIST "PARTNER_COMMERCIAL_FOLLOW_UP_LIST";
  22.     const FOLLOW_UP_LIST "PARTNER_FOLLOW_UP_LIST";
  23.     const FOLLOW_UP_UPDATE "PARTNER_FOLLOW_UP_UPDATE";
  24.     const GLOBAL_TURNOVER_LIST "PARTNER_GLOBAL_TURNOVER_LIST";
  25.     const INDIVIDUAL_SALE_LIST "PARTNER_INDIVIDUAL_SALE_LIST";
  26.     protected function supports($attribute$subject): bool
  27.     {
  28.         return in_array($attribute, [
  29.             self::LIST,
  30.             self::DETAIL,
  31.             self::CREATE,
  32.             self::UPDATE,
  33.             self::REMOVE,
  34.             self::SWITCH_ACTIVE,
  35.             self::DISCOUNT_LIST,
  36.             self::DISCOUNT_CREATE,
  37.             self::DISCOUNT_UPDATE,
  38.             self::DISCOUNT_UPDATE_FORCE,
  39.             self::DISCOUNT_DELETE,
  40.             self::COMMERCIAL_FOLLOW_UP_LIST,
  41.             self::FOLLOW_UP_LIST,
  42.             self::FOLLOW_UP_UPDATE,
  43.             self::GLOBAL_TURNOVER_LIST,
  44.             self::INDIVIDUAL_SALE_LIST,
  45.         ]);
  46.     }
  47.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  48.     {
  49.         /** @var User $loggedUser */
  50.         $loggedUser $token->getUser();
  51.         if (!$loggedUser instanceof UserInterface)
  52.             return false;
  53.         switch ($attribute) {
  54.             case self::DISCOUNT_UPDATE:
  55.                 return $this->voteOnDiscountUpdate($subject$loggedUser);
  56.             default:
  57.                 return in_array($attribute$loggedUser->getRoles());
  58.         }
  59.     }
  60.     private function voteOnDiscountUpdate($subjectUserInterface $loggedUser): bool
  61.     {
  62.         if ($subject === null) {
  63.             return false;
  64.         }
  65.         /** @var PartnerCompanyDiscount $partnerCompanyDiscount */
  66.         $partnerCompanyDiscount $subject;
  67.         if ($partnerCompanyDiscount->isArchived() || $partnerCompanyDiscount->isDefault()) {
  68.             return in_array(self::DISCOUNT_UPDATE_FORCE$loggedUser->getRoles());
  69.         }
  70.         return in_array(self::DISCOUNT_UPDATE$loggedUser->getRoles());
  71.     }
  72. }