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

时间:2014-12-08 11:07:12

标签: fosuserbundle sonata-admin sonata

我正在尝试使用sonata admin bundle + fosuser + ACL

来实现这一点

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

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

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

但奏鸣曲管理员角色非常混乱。 我没有编辑每个用户的角色,而是将用户分配到组(创建3组普通组,员工组和超级管理员组)并为其分配角色(组)。

但我真的很困惑应该为员工和普通用户分配什么角色。 如果我分配了ROLE_SUPER_ADMIN角色,则用户可以执行所有操作。

如果我只将ROLE_SONATA_ADMIN分配给组,则仪表板为空而没有任何项目。

那么我怎样才能实现我的目标呢? 感谢。

目前的角色 http://i59.tinypic.com/iwlkjt.jpg

1 个答案:

答案 0 :(得分:1)

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

首先,每次添加任何管理员时都应该运行此命令(如果你没有这样做):

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权限
  • 查看图库列表,编辑每个项目并创建新项目,然后您应该给予他给定管理员的操作员权限
  • 执行其他所有操作(即删除,更改权限),在给定的管理员
  • 上设置MASTER权限

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

ROLE_ADMIN:             [ROLE_STAFF, ROLE_SONATA_EDITOR, ROLE_SONATA_ADMIN]

问候。