Sonata Admin Bundle ACL 不授予编辑权限
Posted
技术标签:
【中文标题】Sonata Admin Bundle ACL 不授予编辑权限【英文标题】:Sonata Admin Bundle ACL don't grant edit 【发布时间】:2018-04-17 15:59:54 【问题描述】:我将 Sonata Admin Bundle 与 ACL 集成,并具有以下配置:
config.yml
sonata_admin:
security:
handler: sonata.admin.security.handler.acl
# acl security information
information:
GUEST: [VIEW, LIST]
MAINTAINER: [EDIT, LIST]
STAFF: [EDIT, LIST, CREATE]
EDITOR: [OPERATOR, EXPORT]
ADMIN: [MASTER]
# permissions not related to an object instance and also to be available when objects do not exist
# the DELETE admin permission means the user is allowed to batch delete objects
admin_permissions: [CREATE, LIST, DELETE, UNDELETE, EXPORT, OPERATOR, MASTER]
# permission related to the objects
object_permissions: [VIEW, EDIT, DELETE, UNDELETE, OPERATOR, MASTER, OWNER]
security.yml
安全性:
role_hierarchy:
ROLE_OPERATOR:
- ROLE_ADMIN_BOOKING_ADMIN
- ROLE_ADMIN_PAYMENT_ADMIN
流程是我们通过BookingAdmin
类创建一个预订对象,并在 postPersist 原则事件监听器中创建支付对象。
$payment = new Payment();
//... set here
$this->entityManager->persist($payment);
$this->entityManager->flush();
问题出在列表中,我看不到编辑按钮,但我可以删除。
当手动运行命令时:
php bin/console sonata:admin:generate-object-acl
之后我就可以看到编辑按钮了。
我在这里做错了什么?因为我是用同一个用户登录的。
编辑
经过一番研究,我发现了下一个问题https://sonata-project.org/bundles/admin/2-3/doc/reference/security.html#acl-and-friendsofsymfony-userbundle
A listener must be implemented that creates the object Access Control List with the required rules if objects are created outside the Admin
这是什么意思,以及我应该如何在侦听器中执行正确的 ACL 角色?
【问题讨论】:
【参考方案1】:我认为你没有足够详细地指出你允许的操作......你只用例如指向管理员“ROLE_ADMIN_BOOKING_ADMIN” ...按照文档,配置应该是“ROLE_ADMIN_BOOKING_ADMIN_EDIT”,例如允许此角色编辑您的管理员...编写“ROLE_ADMIN_BOOKING_ADMIN_ALL”以允许编辑所有内容...
【讨论】:
我在acl_security_identities
中的唯一角色是ROLE_ADMIN_PAYMENT_ADMIN
、ROLE_ADMIN_PAYMENT_EDITOR
、ROLE_ADMIN_PAYMENT_GUEST
、ROLE_ADMIN_PAYMENT_MAINTAINER
和ROLE_ADMIN_PAYMENT_STAFF
是的,但似乎没有指出权限。您是否尝试为您的角色授予权限?像“ROLE_SONATA_ADMIN_DEMO_FOO_VIEW”或“ROLE_SONATA_ADMIN_DEMO_FOO_ALL”
就像我在 EDIT 中所说的那样,问题是对象没有应用安全规则,我发现如果我在事件监听器中使用它会将正确的规则添加到对象 $this->serviceContainer->get('admin.booking')->createObjectSecurity($booking);
我不知道如何这个实现是正确的,但对我来说有效。以上是关于Sonata Admin Bundle ACL 不授予编辑权限的主要内容,如果未能解决你的问题,请参考以下文章
Sonata Admin Bundle + Sonata User Bundle:覆盖登录表单
Symfony 4 + Sonata + Sonata Doctrine ORM Admin Bundle:错误:没有要处理的元数据类
Sonata Media Bundle 与 Sonata Admin Bundle 3.0(或 2.4)
sonata-project/user-bundle dev-master 与 sonata-project/doctrine-orm-admin-bundle 冲突