gpt4 book ai didi

symfony - 使用 Sonata Admin 更新以编程方式创建的对象的 ACL

转载 作者:行者123 更新时间:2023-12-04 12:47:04 25 4
gpt4 key购买 nike

我正在使用带有 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



所以我想这不是使用奏鸣曲管理员的正确方法。但是我在文档中找不到任何内容。

最佳答案

好的,我花了一些时间进行更多的调试,我想我找到了一个很好的解决方案:

获取要创建的对象的管理类:

$whateverAdmin = $this->get('app.admin.whatever');

//create the object
$whatever = new Whatever();
$whatever->setName('test');

现在使用 admin 类来创建对象:

$whateverAdmin->create($whatever);

或者,如果您想使用 entityManager 来持久化,您只需使用 admin 类更新 ACL:

$em->persist($whatever);
$em->flush(); // important to flush first so an ID ist generated

$whateverAdmin->createObjectSecurity($whatever);

关于symfony - 使用 Sonata Admin 更新以编程方式创建的对象的 ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com