<?php
namespace App\Security\Voter;
use App\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class LensAccessVoter extends Voter
{
public const ACCESS_LENS = 'ACCESS_LENS';
protected function supports(string $attribute, mixed $subject): bool
{
return $attribute === self::ACCESS_LENS;
}
protected function voteOnAttribute(
string $attribute,
mixed $subject,
TokenInterface $token
): bool {
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
$userSubscription = $user->getCurrentSubscription();
if (!$userSubscription || !$userSubscription->isValid()) {
return false;
}
$functionalitiesJson = $userSubscription->getSubscription()?->getFunctionalities() ?? '[]';
$functionalities = json_decode($functionalitiesJson, true) ?? [];
return in_array('LENS', $functionalities, true);
}
}