添加我自己的答案
在 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.twig
和vendor\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
模块权限预览