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_ADMINROLE_ADMIN_PAYMENT_EDITORROLE_ADMIN_PAYMENT_GUESTROLE_ADMIN_PAYMENT_MAINTAINERROLE_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 Admin+ACL-不同角色的不同仪表板

Sonata Admin Bundle - 自定义模板

sonata-project/user-bundle dev-master 与 sonata-project/doctrine-orm-admin-bundle 冲突