首页 文章

Sonata Admin Bundle授予自定义管理员角色的权限

提问于
浏览
4

我正在使用“角色”安全处理程序,并希望创建一个新角色“ROLE_SONATA_ADMIN”并授予它所有权限,例如:

ROLE_SONATA_ADMIN: [MASTER]

我可以授予我的用户所有权限的唯一方法是在security.yml中提供它:

ROLE_SONATA_ADMIN:
   - ROLE_SUPER_ADMIN

但我不想在我的角色中包含ROLE_SUPER_ADMIN,因为我可能希望将来添加一些限制

我试着用acl

handler: sonata.admin.security.handler.role

但得到:
Argument 2 passed to Sonata\AdminBundle\Security\Handler\AclSecurityHandler::__construct() must be an instance of Symfony\Component\Security\Acl\Model\MutableAclProviderInterface

角色处理程序对我来说已经足够了,我不需要acl

如何创建角色并为其授予权限?我已阅读文档但仍不明白

Edit: 我现在明白了:对于每个实体,我需要通过security.yml中的角色设置权限,并使用ROLE_SONATA_ADMIN_ [服务名称] _ [权限]
我的服务名称是:sonata.admin.widget
这里的解决方案:

ROLE_SONATA_WIDGET_ADMIN:
      - ROLE_SONATA_ADMIN_WIDGET_LIST
      - ROLE_SONATA_ADMIN_WIDGET_VIEW
      - ROLE_SONATA_ADMIN_WIDGET_CREATE
      - ROLE_SONATA_ADMIN_WIDGET_EDIT
      - ROLE_SONATA_ADMIN_WIDGET_DELETE
      - ROLE_SONATA_ADMIN_WIDGET_EXPORT

    ROLE_SONATA_ADMIN:
      - ROLE_SONATA_WIDGET_ADMIN

1 回答

  • 3

    检查documentation中的第23.3点 . 您可以在 security.yml 中添加角色 . 如果您使用角色处理程序,它就像这样工作 .

    security:
        ...
        role_hierarchy:
            # for convenience, I decided to gather Sonata roles here
            ROLE_SONATA_FOO_READER:
                - ROLE_SONATA_ADMIN_DEMO_FOO_LIST
                - ROLE_SONATA_ADMIN_DEMO_FOO_VIEW
            ROLE_SONATA_FOO_EDITOR:
                - ROLE_SONATA_ADMIN_DEMO_FOO_CREATE
                - ROLE_SONATA_ADMIN_DEMO_FOO_EDIT
            ROLE_SONATA_FOO_ADMIN:
                - ROLE_SONATA_ADMIN_DEMO_FOO_DELETE
                - ROLE_SONATA_ADMIN_DEMO_FOO_EXPORT
            # those are the roles I will use (less verbose)
            ROLE_STAFF:             [ROLE_USER, ROLE_SONATA_FOO_READER]
            ROLE_ADMIN:             [ROLE_STAFF, ROLE_SONATA_FOO_EDITOR, ROLE_SONATA_FOO_ADMIN]
            ROLE_SUPER_ADMIN:       [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
    

相关问题