Search code examples
symfonysonata

Empty dashboard for not ROLE_SUPER_ADMIN user (symfony2, sonata acl)


I use ACL in Sonata Admin Bundle. Аnd when I log in as a root (which has ROLE_SUPER_ADMIN) I can create new users. I've created one (named qwer) and then loged in as qwer.

PROBLEM: in my situation qwer user has empty dashbord, even having roles like

ROLE_SONATA_USER_ADMIN_USER_GUEST, ROLE_SONATA_USER_ADMIN_USER_STAFF, ROLE_SONATA_USER_ADMIN_USER_EDITOR

Please tell my -- what should I do to understad where the problem is.


Solution

  • Did you follow the documentation for ACL fully? You should add your sonata_admin configuration and security.yml just to be sure. Mine looks like:

    sonata_admin:
        # ...
        security:
            handler: sonata.admin.security.handler.acl
            # acl security information
            information:
                LIST:     [LIST]
                GUEST:    [VIEW, LIST]
                STAFF:    [LIST, CREATE]
                EDITOR:   [OPERATOR, EXPORT, EDIT]
                ADMIN:    [MASTER]
            admin_permissions: [CREATE, LIST, DELETE, UNDELETE, EXPORT, OPERATOR, MASTER]
            # permission related to the objects
            object_permissions: [VIEW, EDIT, DELETE, UNDELETE, OPERATOR, MASTER, OWNER]
    

    Also ensure your security.yml has the required configuration:

    security:
        # ...
        providers:
            fos_userbundle:
                id: fos_user.user_manager
        acl:
            connection: default
        access_decision_manager:
            strategy: unanimous
    

    And add a PermissionMap to your app/config/parameters.yml or bundle parameters:

    # src/AppBundle/Resources/config/services.yml
    
    parameters:
        # ...
        # Symfony 3 and above
        security.acl.permission.map:
          class: Sonata\AdminBundle\Security\Acl\Permission\AdminPermissionMap
    
        # Symfony < 3
        security.acl.permission.map.class: Sonata\AdminBundle\Security\Acl\Permission\AdminPermissionMap
    

    Then there are 3 commands you will need to run:

    Initialize your ACL setup (only once)

    php app/console init:acl

    Reload changes to the configuration (every change in the sonata_admin configuration file)

    php app/console sonata:admin:setup-acl

    To generate (new) ACL rules for already existing entities/objects. (every change in the sonata_admin configuration file)

    php app/console sonata:admin:generate-object-acl

    Then once the configuration is setup, logout and log back in again for the roles to apply.