首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Sonata Admin更新以编程方式创建的对象上的ACL

用Sonata Admin更新以编程方式创建的对象上的ACL
EN

Stack Overflow用户
提问于 2015-05-27 17:02:59
回答 1查看 649关注 0票数 7

我正在用ACL使用Sonata-Admin包,但是我必须以编程的方式创建一些对象。但我不知道如何正确地更新所创建实体的ACL表。所以我总是要执行

php应用/控制台奏鸣曲:admin:

当然,这不是一个永久的解决办法。

我尝试这样做: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应用/控制台奏鸣曲:admin:

所以我想当使用奏鸣曲管理时,这不是正确的方法。但我在文件里什么都找不到。

EN

回答 1

Stack Overflow用户

发布于 2015-06-08 13:51:56

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

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

代码语言:javascript
复制
$whateverAdmin = $this->get('app.admin.whatever');

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

现在使用admin类创建对象:

代码语言:javascript
复制
$whateverAdmin->create($whatever);

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

代码语言:javascript
复制
$em->persist($whatever);
$em->flush(); // important to flush first so an ID ist generated

$whateverAdmin->createObjectSecurity($whatever);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30488874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档