如何允许用户ROLE_USER访问SonataAdminBundle服务?

时间:2017-10-29 17:00:31

标签: php symfony fosuserbundle sonata-admin roles

我提前为我的英语道歉。

美好的一天!

我真的找不到问题的答案。我将不胜感激任何帮助。

因此。 Symfony 2.8上有一个项目。有一个模块SonataAdminBundle + FOSUserBundle。我创建了多项服务:UserFlatAdmin

登录管理区域提供了ROLE_USER等等。当您使用ROLE_SUPER_ADMIN进入管理区域时,所有服务都是可见的,当您使用ROLE_USER登录时,不会显示单个服务。使用代码进行不同的操作不会产生任何结果。

也许有人知道如何正确授予用户ROLE_USER访问管理服务的权限?

security.yml

 security:
 role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN
 access_control:
    - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_USER }

services.yml

services:
  admin.admin:
    class: Flatbel\FlatBundle\Admin\AdminAdmin
    arguments: [~, Flatbel\FlatBundle\Entity\Flat,~]
    tags:
        - { name: sonata.admin, manager_type: orm, label: Admin}

AdminAdmin.php

class AdminAdmin extends AbstractAdmin
{

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('id')
            ->add('userid');
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id')
            ->addIdentifier('userid');
    }

    public function toString($object)
    {
        return $object instanceof User
            ? $object->getUsername()
            : 'Flat'; // shown in the breadcrumb on the create view
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper
            ->add('id')
            ->add('userid');
    }
}

1 个答案:

答案 0 :(得分:0)

您需要在sonata_admin.yaml中配置role_admin:

sonata_admin:
    ...
    security:
        role_admin: ROLE_USER