Symfony Sonata管理员:允许用户只编辑他们拥有的实体(ACL)

Symfony Sonata管理员:允许用户只编辑他们拥有的实体(ACL),symfony,acl,sonata-admin,Symfony,Acl,Sonata Admin,我已经用ACL设置了Sonata管理员。我有不同的用户、组和权限,这些都可以正常工作。为了实现这一点,我遵循了 因此,我的问题是:如何确保后端(管理员)用户只能查看、编辑和删除他们使用Symfony和Sonata admin的内置ACL机制创建的实体?Sonata Admin将对象持久化到ACL表中后自动存储对象的所有者(创建者)(从): 所有者: 创建对象时,当前登录的用户被设置为的所有者 并被授予对该对象的所有访问权限 ,但答案没有详细说明如何使用ACL解决此问题。我看到了两种方法: 创建

我已经用ACL设置了Sonata管理员。我有不同的用户、组和权限,这些都可以正常工作。为了实现这一点,我遵循了

因此,我的问题是:如何确保后端(管理员)用户只能查看、编辑和删除他们使用Symfony和Sonata admin的内置ACL机制创建的实体?Sonata Admin将对象持久化到ACL表中后自动存储对象的所有者(创建者)(从):

所有者: 创建对象时,当前登录的用户被设置为的所有者 并被授予对该对象的所有访问权限


,但答案没有详细说明如何使用ACL解决此问题。

我看到了两种方法:

  • 创建一个
  • 重写您的管理类的
我不能做任何这些来做我需要的非常简单的事情,但我认为这就是我的想法


事实上,这是我花了很多时间和数千行代码却没有取得巨大成功的许多Symfony事情之一。。。这样简单的需求应该不会让人感到痛苦…

不要授予用户
编辑
权限。他们可以编辑自己的实例,但不能编辑其他人的实例

我使用以下配置:

#app/config/config.yml
索纳塔行政:
安全:
资料:
职员:[查看、列出、创建]
编辑:[操作员,导出]
管理员:[硕士]

有一个新的Symfony bundle可以做到这一点:


您所需要做的就是安装并激活捆绑包。非常简单有效,我在Sonata Admin 2.2的Symfony2项目中使用了它。

@pulzarraider,我看到您已经回答了这个问题,但是我可以请您详细介绍如何在Sonata Admin中使用ACL实现它吗?我不知道如何将Sonata Admin列表视图中的对象列表限制为当前登录用户拥有的对象。没有
编辑
权限,可以
创建
记录的用户只能编辑和删除他们拥有的实例。我认为删除部分很重要:)CreateQuery()仅用于configureListFields公共函数CreateQuery($context='list')