2014-02-20 64 views
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

如何创建角色并授予权限它?我读过的文件,但还是不明白

编辑:我现在明白了:每一个实体,我需要通过在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 

回答

3

检查点23.3的documentation。您可以在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]