<?php
namespace Moka\Cms\EventSubscriber;
use Moka\Cms\Entity\EntryInterface;
use Moka\Cms\Model\Model;
use Moka\Cms\Security\RoleManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\GuardEvent;
class WorkflowSecuritySubscriber implements EventSubscriberInterface
{
public function __construct(private Model $model, private RoleManager $roleManager)
{
}
public function checkSecurity(GuardEvent $event)
{
/** @var EntryInterface $entry */
$entry = $event->getSubject();
$entryMetadata = $this->model->guessEntryMetadata($entry);
if (!$this->roleManager->isGranted('entry', RoleManager::PUBLISH, $entryMetadata->getName())) {
$event->setBlocked(true);
}
}
public static function getSubscribedEvents()
{
return [
'workflow.entry_default.guard' => ['checkSecurity'],
];
}
}