0

ユーザーがバックエンドから作成されているときに、SonataUser を拡張してisAdminというフィールドを true に設定する必要があります。ADMIN => (管理者ユーザーを作成し、他のエンティティで CRUD を実行できます) とSTAFF => (他のエンティティで CRUD を実行できます)の異なるユーザー グループがあります。顧客はフロントエンドから登録します。

backend_users (STAFF) と顧客の両方が、 SonataUserを拡張する User エンティティのインスタンスです。


これまで、デフォルトの 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',

管理者/ダッシュボードにログインすると、管理者ダッシュボード ウィジェットに BackendUser が表示されます。しかし、「リスト」または「新規追加」をクリックすると、403: Access Denied Exception が発生します。

どこが間違っていますか?

ありがとう、アミット

4

1 に答える 1

0

Sonata ユーザーバンドルの BaseUser クラスをいじる必要はないと思います。

代わりに、sonata ユーザーの admin crud (Sonata\UserBundle\Admin\Document\UserAdmin) に基づいて独自のバンドルに新しい admin crud を作成し、それを prePersist() メソッドで拡張して isAdmin を true に設定することができます。

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

prePersist は実際には、新しいエンティティを永続化する前に呼び出されるフックです。

于 2012-05-20T11:29:55.403 に答える