<?php
namespace App\Security\Voter;
use App\Entity\Enum\RoleEnum;
use App\Entity\RoleManagement;
use App\Service\Routes\RoutesPermissions;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class RouteRoleVoter extends Voter
{
public function __construct(
private RequestStack $requestStack,
private RoutesPermissions $routesPermissions
) {}
protected function supports(string $attribute, mixed $subject): bool
{
return in_array($attribute, [
RoleEnum::SUPER_ADMIN->value,
RoleEnum::REGULAR_ADMIN->value,
RoleEnum::STANDARD_USER->value,
]);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
{
$user = $token->getUser();
if (!$user) return false;
$request = $this->requestStack->getCurrentRequest();
$routeName = $request->attributes->get('_route');
return $this->routesPermissions->checkUserPermissionByRouteName($routeName);
}
}