0

在 Sonata admin 中,角色基于具有 CRUD 导出和主权限的管理服务名称,但是为其他用户创建组或为用户分配特定权限的方式看起来不太友好,考虑 sonata admin post 模块的示例服务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

对于普通用户而言,其难以读取/分配角色是否有更好的方法来表示生成的角色?

4

1 回答 1

3

添加我自己的答案

在 Sonata 管理员中,如果您希望将显示安全角色更改为用户友好的视图,您必须在 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.twigvendor\sonata-project\user-bundle\Resources\views添加app\Resources\SonataUserBundle\views\Form路径来覆盖它,它将覆盖父树枝文件,在树枝文件中,我尝试使用手风琴控制引导程序来明智地显示角色模块并具有适当的权限


注意:此代码只会显示权限 [Create,Edit,View,List,Export,Delete,Master] 它不会处理自定义权限

最后一步将您的服务文件导入主配置文件,即config.yml

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

对于完整的代码演示,您可以在下面的存储库中找到它

Sonata Admin Enhanced View For Security Roles

模块权限预览

在此处输入图像描述

于 2015-02-04T06:28:30.033 回答