Sonata Admin+ACL-不同角色的不同仪表板

Posted

技术标签:

【中文标题】Sonata Admin+ACL-不同角色的不同仪表板【英文标题】:Sonata Admin+ACL-Different dashboard for different roles 【发布时间】:2015-02-06 00:40:21 【问题描述】:

我正在尝试使用 Sonata admin bundle+ fosuser+ ACL 来实现这一目标

三级用户--普通用户----员工----超级管理员 当每个用户登录时,每个用户都会被重定向到管理仪表板,但只显示一些管理项目(列表),并且超级管理员以外的用户只允许编辑自己的项目

我实现了此处列出的所有内容 http://sonata-project.org/bundles/admin/2-3/doc/reference/security.html

我运行了所有 acl 命令(init 等),一切正常

但是奏鸣曲管理员角色是如此令人困惑。 我不是编辑每个用户的角色,而是将用户分配给组(创建 3 个普通组、员工组和超级管理员组)并将角色分配给它(组)。

但是我真的很困惑应该为员工和普通用户分配什么角色。 如果我分配了 ROLE_SUPER_ADMIN 角色,用户就可以做任何事情。

如果我只分配 ROLE_SONATA_ADMIN 来分组仪表板是空的,没有任何项目。

那么我怎样才能实现我想要的呢? 谢谢。

这里的当前角色 http://i59.tinypic.com/iwlkjt.jpg

【问题讨论】:

【参考方案1】:

您应该分别为每个管理员设置权限。在您的图片上,我看不到管理权限的管理包,除了关系包(GalleryHasMedia),当您对多对多关系进行操作时会显示该包。您只有为 STAFF 设置的 ROLE_SONATA_MEDIA_ADMIN_GALLERY_HAS_MEDIA 的权限。我可以想象您在仪表板或左侧边栏菜单上没有此关系的块。

首先,您应该在每次添加任何管理员时运行此命令(以防万一):

app/console sonata:admin:setup-acl

假设您拥有 SonataMediaBundle,您应该拥有以下 ROLE:

ROLE_SONATA_MEDIA_ADMIN_GALLERY_GUEST
ROLE_SONATA_MEDIA_ADMIN_GALLERY_STAFF
ROLE_SONATA_MEDIA_ADMIN_GALLERY_EDITOR
ROLE_SONATA_MEDIA_ADMIN_GALLERY_ADMIN

假设您将权限配置如下:

sonata_admin:
    security:
        handler: sonata.admin.security.handler.acl
        # acl security information
        information:
            GUEST:    [VIEW, LIST]
            STAFF:    [EDIT, LIST, CREATE]
            EDITOR:   [OPERATOR, EXPORT]
            ADMIN:    [MASTER]

        admin_permissions: [CREATE, LIST, DELETE, UNDELETE, EXPORT, OPERATOR, MASTER]

所以如果你想要用户 X:

要查看图库列表,您应该在给定管理员上授予他 GUEST 权限 要查看图库列表、编辑自己的项目并创建新项目,您应该授予他对给定管理员的 STAFF 权限 要查看图库列表、编辑每个项目并创建新项目,您应该授予他在给定管理员上的 OPERATOR 权限 要执行其他所有操作(即删除、更改权限),请在给定管理员上设置 MASTER 权限

也尝试扩展您的 ROLE_ADMIN 层次结构(在 app/config/security.yml):

ROLE_ADMIN:             [ROLE_STAFF, ROLE_SONATA_EDITOR, ROLE_SONATA_ADMIN]

问候。

【讨论】:

我试图在链接中的图片中总结我的问题。我创建了一个用户组“Agent”并为其分配了一个名为“agent1”的用户。我希望分配给该组的用户能够使用仪表板添加、编辑、删除他们自己的项目,但当前仪表板显示为空。此处图片中的问题:link 将 ROLE_ADMIN 添加到代理组。 我的意思是 ROLE_SONATA_ADMIN 但它包含在 ROLE_ADMIN 中。请参阅 SonataAdminbundle:standard_layout.html.twig 但抱歉我没听明白。如果您在图片中看到 ROLE_SONATA_ADMIN 已检查代理组(以及所有员工角色)。我附上了另一张显示代理组处于活动状态的图像(用户agent1在agent用户组中)。我可以登录仪表板,但agent1为空,如上面评论中的图片所示。 link 所以它应该可以工作。除非你没有设置 sonata:admin:setup-acl 并更新在 Admin 之外创建的对象:sonata:admin:generate-object-acl。

以上是关于Sonata Admin+ACL-不同角色的不同仪表板的主要内容,如果未能解决你的问题,请参考以下文章

在 Sonata Admin 列表视图中显示不同的实体

在 Sonata Admin 的列表视图(角色/权限)中编辑

Sonata Admin Bundle 删除 routeCollection 角色

Symfony 3 上的 Sonata Admin 实体翻译

在 symfony sonata 管理包的不同子菜单中拆分域

当sonata_type_admin调用时如何在Sonata的Admin类中获取底层对象?