<?php
namespace AppBundle\Security;
use App\UserRegistration\LawFirmSubscriptionPlanEnum;
use AppBundle\Entity\LawFirm;
use AppBundle\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class BarAssociationVoter extends Voter
{
public const LAW_FIRM_FROM_BAR_ASSOCIATION = 'law_firm.from_bar_association';
public function isFromBarAssociation(LawFirm $lawFirm): bool
{
return $lawFirm->getOffer() !== null && $lawFirm->getSubscriptionPlan() === LawFirmSubscriptionPlanEnum::SPECIAL_OFFER;
}
protected function supports($attribute, $subject)
{
if (self::LAW_FIRM_FROM_BAR_ASSOCIATION === $attribute && (null === $subject || $subject instanceof LawFirm)) {
return true;
}
return false;
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
switch ($attribute) {
case self::LAW_FIRM_FROM_BAR_ASSOCIATION:
return $this->isFromBarAssociation($subject ?? $user->getLawFirm());
default:
throw new \LogicException('This code should not be reached');
}
}
}