Symfony2 SonataAdmin:“拒绝访问”在尝试扩展SonataUserAdmin时出现异常

时间:2012-04-26 12:59:23

标签: symfony symfony-sonata

我需要扩展 SonataUser ,以便在从后端创建用户时将名为isAdmin的字段设置为true。 我有 ADMIN =>的不同用户组(可以创建管理员用户并对其他实体执行CRUD)和 STAFF => (可以对其他实体执行CRUD)。 客户从前端注册。

backend_users (STAFF)和客户都是User实体的实例,它扩展了SonataUser。


直到现在我才使用默认的User和Group Admin类。这是我的app / config / config.yml看起来如何

...app/config/config.yml...
            users:
                label: Users
                items: [ sonata.user.admin.user ]
            groups:
                label: Groups
                items: [sonata.user.admin.group]
...

它对我来说很好。

现在我需要自定义默认实现,因此我将代码从Sonata/UserBundle/User/BaseUser.php复制到<my namespace>/AdminBundle/Admin/BackendUser.php 我创建了新服务并将其映射到config.yml

...app/config/config.yml...
            users:
                label: Users
                items: [ gd_admin.backend_user ]
            groups:
                label: Groups
                items: [sonata.user.admin.group]
...


...GD/AdminBundle/Resources/services.yml...
parameters:
    gd_admin.backend_user.class: GD\AdminBundle\Admin\BackendUserAdmin
..
services:
    gd_admin.backend_user:
        class: %gd_admin.backend_user.class%
        tags:
            - { name: sonata.admin, manager_type: orm, label: Backend User } 
        arguments: [null, GD\AdminBundle\Entity\User, null]
        # NOTE: No group defined in tags
...

之前我曾授予ADMIN GROUP以下角色:

        'ROLE_SONATA_USER_ADMIN_USER_EDIT',
        'ROLE_SONATA_USER_ADMIN_USER_LIST',
        'ROLE_SONATA_USER_ADMIN_ USER _CREATE',
        'ROLE_SONATA_USER_ADMIN_ USER _VIEW',
        'ROLE_SONATA_USER_ADMIN_ USER _DELETE',
        'ROLE_SONATA_USER_ADMIN_ USER _OPERATOR',
        'ROLE_SONATA_USER_ADMIN_ USER _MASTER',
Now they are:
        'ROLE_GD_ADMIN_BACKEND_USER_EDIT',
        'ROLE_GD_ADMIN_BACKEND_USER_LIST',
        'ROLE_GD_ADMIN_BACKEND_USER_CREATE',
        'ROLE_GD_ADMIN_BACKEND_USER_VIEW',
        'ROLE_GD_ADMIN_BACKEND_USER_DELETE',
        'ROLE_GD_ADMIN_BACKEND_USER_OPERATOR',
        'ROLE_GD_ADMIN_BACKEND_USER_MASTER',

当我登录我的管理员/信息中心时 我可以在Admin Dashboard小部件中看到BackendUser。 但是,当我点击“列表”或“添加新”时,我得到403:访问被拒绝的例外。

我哪里错了?

谢谢, 阿米特

1 个答案:

答案 0 :(得分:0)

我认为你不必使用sonata用户包中的BaseUser类。

相反,您可以根据sonata用户admin crud(Sonata \ UserBundle \ Admin \ Document \ UserAdmin)在您自己的捆绑包中创建一个新的admin crud,并使用prePersist()方法扩展它以将isAdmin设置为true:

public function prePersist($object)
{
  $object->setIsAdmin(true);
}

prePersist实际上是一个在持久化新实体之前被调用的钩子。