0

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

backend_users (STAFF) 和customers都是 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 组:

        '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:拒绝访问异常。

我哪里错了?

谢谢,阿米特

4

1 回答 1

0

我认为您不必弄乱奏鸣曲用户捆绑包中的 BaseUser 类。

相反,您可以根据奏鸣曲用户管理员 crud (Sonata\UserBundle\Admin\Document\UserAdmin) 在您自己的包中创建一个新的管理员 crud,并使用 prePersist() 方法将其扩展以将 isAdmin 设置为 true:

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

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

于 2012-05-20T11:29:55.403 回答