<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\Acl\EventListener;
use BitBag\OpenMarketplace\Component\Acl\Checker\PrivilegeCheckerInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
final class AclListener
{
public function __construct(
private PrivilegeCheckerInterface $privilegeChecker,
) {
}
public function __invoke(RequestEvent $event): void
{
if (false === $event->isMainRequest()) {
return;
}
$route = $event->getRequest()->attributes->get('_route');
if (false === $this->privilegeChecker->hasPrivilege($route)) {
throw new AccessDeniedHttpException();
}
}
}