src/Mailjet/Voter/MailjetVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Mailjet\Voter;
  3. use App\Mailjet\Entity\MailjetCampaign;
  4. use App\Mailjet\Entity\MailjetCampaignType;
  5. use App\Mailjet\Entity\MailjetOperation;
  6. use App\Mailjet\Repository\MailjetCampaignRepository;
  7. use Crea\SecurityBundle\Entity\User;
  8. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  10. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  11. use Symfony\Component\Security\Core\User\UserInterface;
  12. class MailjetVoter extends Voter
  13. {
  14.     const OPERATION_LIST "MAILJET_OPERATION_LIST";
  15.     const OPERATION_CREATE "MAILJET_OPERATION_CREATE";
  16.     const OPERATION_UPDATE "MAILJET_OPERATION_UPDATE";
  17.     const OPERATION_REMOVE "MAILJET_OPERATION_REMOVE";
  18.     const OPERATION_STATISTICS "MAILJET_OPERATION_STATISTICS";
  19.     const CAMPAIGN_LIST "MAILJET_CAMPAIGN_LIST";
  20.     const CAMPAIGN_CREATE "MAILJET_CAMPAIGN_CREATE";
  21.     const CAMPAIGN_UPDATE "MAILJET_CAMPAIGN_UPDATE";
  22.     const CAMPAIGN_DUPLICATE "MAILJET_CAMPAIGN_DUPLICATE";
  23.     const CAMPAIGN_SYNCHRONIZE "MAILJET_CAMPAIGN_SYNCHRONIZE";
  24.     const CAMPAIGN_REMOVE "MAILJET_CAMPAIGN_REMOVE";
  25.     const CAMPAIGN_STATISTICS "MAILJET_CAMPAIGN_STATISTICS";
  26.     const CAMPAIGN_TYPE_LIST "MAILJET_CAMPAIGN_TYPE_LIST";
  27.     const CAMPAIGN_TYPE_CREATE "MAILJET_CAMPAIGN_TYPE_CREATE";
  28.     const CAMPAIGN_TYPE_UPDATE "MAILJET_CAMPAIGN_TYPE_UPDATE";
  29.     const CAMPAIGN_TYPE_REMOVE "MAILJET_CAMPAIGN_TYPE_REMOVE";
  30.     const CONTACT_LIST_SYNCHRONIZE "MAILJET_CONTACT_LIST_SYNCHRONIZE";
  31.     protected ParameterBagInterface $parameterBag;
  32.     public function __construct(ParameterBagInterface $parameterBag)
  33.     {
  34.         $this->parameterBag $parameterBag;
  35.     }
  36.     protected function supports(string $attribute$subject): bool
  37.     {
  38.         return in_array($attribute, [
  39.             self::OPERATION_LIST,
  40.             self::OPERATION_CREATE,
  41.             self::OPERATION_UPDATE,
  42.             self::OPERATION_REMOVE,
  43.             self::OPERATION_STATISTICS,
  44.             self::CAMPAIGN_LIST,
  45.             self::CAMPAIGN_CREATE,
  46.             self::CAMPAIGN_UPDATE,
  47.             self::CAMPAIGN_DUPLICATE,
  48.             self::CAMPAIGN_REMOVE,
  49.             self::CAMPAIGN_SYNCHRONIZE,
  50.             self::CAMPAIGN_STATISTICS,
  51.             self::CAMPAIGN_TYPE_LIST,
  52.             self::CAMPAIGN_TYPE_CREATE,
  53.             self::CAMPAIGN_TYPE_UPDATE,
  54.             self::CAMPAIGN_TYPE_REMOVE,
  55.             self::CONTACT_LIST_SYNCHRONIZE,
  56.         ]);
  57.     }
  58.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  59.     {
  60.         /** @var User $loggedUser */
  61.         $loggedUser $token->getUser();
  62.         if (!$loggedUser instanceof UserInterface)
  63.             return false;
  64.         if (!$this->parameterBag->get('crea_mailjet_sync_active') && in_array($attribute, [
  65.                 self::CAMPAIGN_CREATE,
  66.                 self::CAMPAIGN_UPDATE,
  67.                 self::CAMPAIGN_DUPLICATE,
  68.                 self::CAMPAIGN_SYNCHRONIZE,
  69.                 self::CONTACT_LIST_SYNCHRONIZE,
  70.             ])) {
  71.             return false;
  72.         }
  73.         if ($subject instanceof MailjetCampaignType && $attribute === self::CAMPAIGN_TYPE_REMOVE && $subject->getMailjetCampaigns()->count() > 0) {
  74.             return false;
  75.         }
  76.         if ($subject instanceof MailjetCampaign && $attribute === self::CAMPAIGN_UPDATE && $subject->getMailjetCampaignState() === MailjetCampaignRepository::MAILER_CAMPAIGN_STATE_MAILJET_SENT) {
  77.             return false;
  78.         }
  79.         if ($subject instanceof MailjetCampaign && $attribute === self::CAMPAIGN_STATISTICS && $subject->getMailjetStatistic() === null) {
  80.             return false;
  81.         }
  82.         if ($subject instanceof MailjetOperation && $attribute === self::OPERATION_STATISTICS && ($subject->getTotalCount() === || $subject->getTotalCount() === null)) {
  83.             return false;
  84.         }
  85.         return in_array($attribute$loggedUser->getRoles());
  86.     }
  87. }