src/Service/Subscription/Voter/SubscriptionVoter.php line 8

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\Subscription\Voter;
  3. use Harmonizely\Model\UserInterface;
  4. use Harmonizely\Service\Panel\AccessVoters\AbstractVoter;
  5. class SubscriptionVoter extends AbstractVoter
  6. {
  7.     const RESOURCE_NAME 'subscription';
  8.     const CUSTOM_DOMAIN 'custom_domain';
  9.     const CHANGE_TEMPLATE 'change_template';
  10.     const WHITE_LABEL 'white_label';
  11.     const ORGANIZATION 'organization';
  12.     const SMS 'sms';
  13.     const SMTP 'smtp';
  14.     const FLEXIBLE_DURATION 'flexible_duration';
  15.     const SBPAY_PRO 'sbpay_pro';
  16.     const MULTIPLE_MEETING 'multiple_meeting';
  17.     const MULTIPLE_EMAIL 'multiple_email';
  18.     const EVENT_TYPE_TAG 'event_type_tag';
  19.     const API 'api';
  20.     const USER_RELATION 'user_relation';
  21.     const ROUTING_FORM 'routing_form';
  22.     /**
  23.      * @return string
  24.      */
  25.     function getResourceName(): string
  26.     {
  27.         return self::RESOURCE_NAME;
  28.     }
  29.     /**
  30.      * @return string[]
  31.      */
  32.     function getResourceAttributes(): array
  33.     {
  34.         return [
  35.             self::CUSTOM_DOMAIN,
  36.             self::WHITE_LABEL,
  37.             self::CHANGE_TEMPLATE,
  38.             self::ORGANIZATION,
  39.             self::SMS,
  40.             self::SMTP,
  41.             self::FLEXIBLE_DURATION,
  42.             self::SBPAY_PRO,
  43.             self::MULTIPLE_MEETING,
  44.             self::MULTIPLE_EMAIL,
  45.             self::EVENT_TYPE_TAG,
  46.             self::API,
  47.             self::USER_RELATION,
  48.             self::ROUTING_FORM
  49.         ];
  50.     }
  51.     /**
  52.      * @param UserInterface $user
  53.      * @param $subject
  54.      * @return array|string[]
  55.      */
  56.     function getAllowedAttributes(UserInterface $user$subject): array
  57.     {
  58.         if ($user->hasPaidSubscription()) {
  59.             return $this->getResourceAttributes();
  60.         }
  61.         return [
  62.             self::API
  63.         ];
  64.     }
  65.     /**
  66.      * @param string $attribute
  67.      * @param mixed $subject
  68.      * @return bool
  69.      */
  70.     protected function supports($attribute$subject): bool
  71.     {
  72.         if (!in_array($attribute$this->getResourceAttributes())) {
  73.             return false;
  74.         }
  75.         return true;
  76.     }
  77.     /**
  78.      * @param string $attribute
  79.      * @param UserInterface $user
  80.      * @return bool
  81.      */
  82.     public static function staticVoteOnAttribute(string $attributeUserInterface $user): bool
  83.     {
  84.         $instance = new self();
  85.         if (!in_array($attribute$instance->getResourceAttributes())) {
  86.             return false;
  87.         }
  88.         return in_array($attribute$instance->getAllowedAttributes($usernull));
  89.     }
  90. }