src/Service/MigrationSubscription/Voter/MigrationSubscriptionVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\MigrationSubscription\Voter;
  3. use Harmonizely\Model\UserInterface;
  4. use Harmonizely\Repository\Company\Contract\IMigrationSubscriptionRepository;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. class MigrationSubscriptionVoter extends Voter
  8. {
  9.     const MIGRATION_SUBSCRIPTION 'migration_subscription';
  10.     const MIGRATION_SUBSCRIPTION_APPLY 'migration_subscription_apply';
  11.     /**
  12.      * @var IMigrationSubscriptionRepository
  13.      */
  14.     private IMigrationSubscriptionRepository $migrationSubscriptionRepository;
  15.     /**
  16.      * @param IMigrationSubscriptionRepository $migrationSubscriptionRepository
  17.      */
  18.     public function __construct(IMigrationSubscriptionRepository $migrationSubscriptionRepository)
  19.     {
  20.         $this->migrationSubscriptionRepository $migrationSubscriptionRepository;
  21.     }
  22.     protected function supports($attribute$subject): bool
  23.     {
  24.         if (!in_array($attribute, [self::MIGRATION_SUBSCRIPTIONself::MIGRATION_SUBSCRIPTION_APPLY])) {
  25.             return false;
  26.         }
  27.         if (false === $subject instanceof UserInterface) {
  28.             return false;
  29.         }
  30.         return true;
  31.     }
  32.     /**
  33.      * @param string $attribute
  34.      * @param UserInterface $subject
  35.      * @param TokenInterface $token
  36.      * @return bool
  37.      */
  38.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  39.     {
  40.         if ($attribute === self::MIGRATION_SUBSCRIPTION) {
  41.             return !$this->migrationSubscriptionRepository->getByUser($subject);
  42.         }
  43.         return true;
  44.     }
  45. }