我正在使用带有ACL的Sonata-Admin软件包,但我必须以编程方式创建一些对象。但我无法弄清楚如何正确更新已创建实体的ACL表。所以我总是要执行
php app / console sonata:admin:generate-object-acl
这当然不是永久的解决方案。
我尝试过这样描述:http://symfony.com/doc/current/cookbook/security/acl.html#creating-an-acl-and-adding-an-ace所以我在我的实体中实现了DomainObjectInterface并添加了getObjectIdentifier方法。
但是现在我在执行时遇到Symfony \ Component \ Security \ Acl \ Exception \ AclAlreadyExistsException异常:
php app / console sonata:admin:generate-object-acl
所以我猜这不是使用sonata-admin时这样做的正确方法。但我在文档中找不到任何内容。
答案 0 :(得分:2)
好的,我花了一些时间调试一下,我觉得我找到了一个很好的解决方案:
获取您要创建的对象的管理类:
$whateverAdmin->create($whatever);
现在使用admin类创建对象:
$em->persist($whatever);
$em->flush(); // important to flush first so an ID ist generated
$whateverAdmin->createObjectSecurity($whatever);
或者,如果您想使用entityManager来持久化,您可以使用admin类更新ACL:
data-show="true"