<?php
namespace Harmonizely\Service\MigrationSubscription\Voter;
use Harmonizely\Model\UserInterface;
use Harmonizely\Repository\Company\Contract\IMigrationSubscriptionRepository;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class MigrationSubscriptionVoter extends Voter
{
const MIGRATION_SUBSCRIPTION = 'migration_subscription';
const MIGRATION_SUBSCRIPTION_APPLY = 'migration_subscription_apply';
/**
* @var IMigrationSubscriptionRepository
*/
private IMigrationSubscriptionRepository $migrationSubscriptionRepository;
/**
* @param IMigrationSubscriptionRepository $migrationSubscriptionRepository
*/
public function __construct(IMigrationSubscriptionRepository $migrationSubscriptionRepository)
{
$this->migrationSubscriptionRepository = $migrationSubscriptionRepository;
}
protected function supports($attribute, $subject): bool
{
if (!in_array($attribute, [self::MIGRATION_SUBSCRIPTION, self::MIGRATION_SUBSCRIPTION_APPLY])) {
return false;
}
if (false === $subject instanceof UserInterface) {
return false;
}
return true;
}
/**
* @param string $attribute
* @param UserInterface $subject
* @param TokenInterface $token
* @return bool
*/
protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
if ($attribute === self::MIGRATION_SUBSCRIPTION) {
return !$this->migrationSubscriptionRepository->getByUser($subject);
}
return true;
}
}