Расширенный просмотр администратора Sonata для ролей безопасности

В администраторе сонаты роли основаны на имени службы администрирования с экспортом CRUD и основными разрешениями, но то, как это выглядит, не очень удобно для пользователя, чтобы создавать группы для других пользователей или назначать определенные разрешения пользователю, рассматривая пример для модуля поста администратора сонаты, службы для admin называется sonata.news.admin.post, и для этой службы сгенерированные роли будут выглядеть так:

ROLE_SONATA_NEWS_ADMIN_POST_EDIT
ROLE_SONATA_NEWS_ADMIN_POST_LIST
ROLE_SONATA_NEWS_ADMIN_POST_CREATE
ROLE_SONATA_NEWS_ADMIN_POST_VIEW
ROLE_SONATA_NEWS_ADMIN_POST_DELETE
ROLE_SONATA_NEWS_ADMIN_POST_EXPORT
ROLE_SONATA_NEWS_ADMIN_POST_OPERATOR
ROLE_SONATA_NEWS_ADMIN_POST_MASTER

Обычному пользователю трудно читать/назначать роли. Есть ли лучший способ представления сгенерированных ролей?


person M Khalid Junaid    schedule 04.02.2015    source источник


Ответы (1)


Добавляю свой ответ

В администраторе Sonata, если вы хотите изменить отображаемые роли безопасности в виде удобного для пользователя представления, вам необходимо переопределить ниже службы сонаты.

  • sonata.user.editable_role_builder
  • sonata.user.form.type.security_roles

И определения будут выглядеть так, как показано ниже

    <services>
        <service id="sonata.user.editable_role_builder" class="Acme\DemoBundle\Security\EditableRolesBuilder">
            <argument type="service" id="security.context" />
            <argument type="service" id="sonata.admin.pool" />
            <argument>%security.role_hierarchy.roles%</argument>
        </service>
        <service id="sonata.user.form.type.security_roles" class="Acme\DemoBundle\Form\Type\SecurityRolesType">
            <tag name="form.type" alias="sonata_security_roles" />
            <argument type="service" id="sonata.user.editable_role_builder" />
        </service>

    </services>

И определите свои классы в этих сервисах для демо-кода, который я использовал Acme\DemoBundle

Теперь класс SecurityRolesType зависит от EditableRolesBuilder Сонаты, вы должны сделать его зависимым от вашего собственного класса EditableRolesBuilder, поэтому таким же образом переопределить зависимость RestoreRolesTransformer сонаты от вашего класса.

Я преобразовал все роли в массив модульных ролей в SecurityRolesType.php и передал его для просмотра всех настроек, которые вы можете просмотреть в этом файле.

Также переопределите шаблон ветки для ролей, вы можете переопределить его, скопировав form_admin_fields.html.twig из vendor\sonata-project\user-bundle\Resources\views и добавив путь app\Resources\SonataUserBundle\views\Form, он переопределит родительский файл ветки. В файле ветки я попытался использовать начальную загрузку управления аккордеоном для отображения ролей по модулю и с соответствующими разрешениями.


Примечание. Этот код будет отображать только разрешения [Создание, редактирование, просмотр, список, экспорт, удаление, мастер], он не будет обрабатывать настраиваемые разрешения.

Последний шаг: импортируйте файл службы в основной файл конфигурации, который называется config.yml.

    imports:
        - { resource: parameters.yml }
        - { resource: security.yml }
        - { resource: @AcmeDemoBundle/Resources/config/admin.xml }

Полную демонстрацию кода вы можете найти в репозитории ниже.

Sonata Admin Enhanced View For Security Roles

Предварительный просмотр разрешений модуля

введите здесь описание изображения

person M Khalid Junaid    schedule 04.02.2015