Um in Symfony Sonata die ACL auch mit Einträgen zu nutzen, die durch ein Frontend oder im Hintergrund erzeugt werden, ohne den Sonatakontext, muss man den ACL Eintrag selbst erstellen. Dazu kann man einen EntityEventListener installieren und im postPersist Event folgendes tun:
public function postPersist(LifecycleEventArgs $args) { $this->addAcl($args); } protected function addAcl(LifecycleEventArgs $args) { $entity = $args->getEntity(); $adminSecurityHandler = $this->container->get('sonata.admin.security.handler'); $adminPool = $this->container->get('sonata.admin.pool'); $admin = $adminPool->getAdminByClass(get_class($entity)); if (null !== $admin) { $objectIdentity = ObjectIdentity::fromDomainObject($entity); $acl = $adminSecurityHandler->getObjectAcl($objectIdentity); if (is_null($acl)) { $acl = $adminSecurityHandler->createAcl($objectIdentity); } $adminSecurityHandler->addObjectClassAces($acl, $adminSecurityHandler->buildSecurityInformation($admin)); $adminSecurityHandler->updateAcl($acl); } }