Мне нужно расширить SonataUser, чтобы задать поле с именем isAdmin в true, когда пользователь создается из бэкэнд. У меня разные группы пользователей для ADMIN => (может создавать пользователей admin и выполнять CRUD на других объектах) и STAFF => (может выполнять CRUD на других объектах). Клиенты регистрируются из внешнего интерфейса.Symfony2 SonataAdmin: «Access Denied» Исключение при попытке расширения SonataUserAdmin
Оба backend_users (ПЕРСОНАЛ) и клиенты являются экземплярами объекта пользователя, который проходит SonataUser.
До сих пор я использовал классы по умолчанию для пользователей и групп. Вот как выглядело мое приложение 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: «Отказано в доступе».
Куда я иду не так?
Спасибо, Amit
umm ... извините, что отсутствовала одетая опечатка. Я поместил содержимое UserAdmin.php в свой GDAdmin/BackendUserAdmin.php. PrePersist не будет работать, потому что событие также вызывается, когда пользователь создается из интерфейса сайта. Поэтому я вручную устанавливаю флаг в true в BackendUserAdminController. – Amit
Проблема заключается в передаче моего идентификатора сервиса - gd_admin.backend_user. Если я заменил «sonata.user.admin.user» на «gd_admin.backend_user» в файле /Resources /Config/admin_orm.xml пакета, все работает отлично. Я хочу знать, как мне передать этот идентификатор службы? – Amit