Sonata admin 安全角色的增强视图
Sonata admin enhanced view for security roles
在 sonata admin 中,角色基于具有 CRUD 导出和主权限的管理服务名称,但是为其他用户创建组或为用户分配特定权限的方式看起来不太用户友好,以 sonata admin 为例post 模块管理员服务被命名为 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
对于普通用户来说很难 read/assign 角色有没有更好的方式来表示生成的角色?
添加我自己的答案
在 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>
并在这些服务中定义您的 classes,我使用的演示代码 Acme\DemoBundle
现在 SecurityRolesType
class 依赖于 Sonata 的 EditableRolesBuilder
你必须让它依赖于你自己的 EditableRolesBuilder
Class 所以以同样的方式覆盖依赖奏鸣曲的 RestoreRolesTransformer
到你的 class
我已将所有角色转换为 SecurityRolesType.php
中的一系列模块明智的角色,并将其传递给查看您可以在此文件中查看的所有自定义设置
同时覆盖角色的 twig 模板,您可以通过从 vendor\sonata-project\user-bundle\Resources\views
复制 form_admin_fields.html.twig
并添加 app\Resources\SonataUserBundle\views\Form
路径来覆盖它,它将覆盖父 twig 文件,在我试过的 twig 文件中使用手风琴控件 bootstrap 以明智和适当的权限显示角色模块
Note: This code will only display permissions
[Create,Edit,View,List,Export,Delete,Master] it will not handle custom
permission
最后一步将您的服务文件导入主配置文件 config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: @AcmeDemoBundle/Resources/config/admin.xml }
有关完整的代码演示,您可以在下面的存储库中找到它
Sonata Admin Enhanced View For Security Roles
模块权限预览
在 sonata admin 中,角色基于具有 CRUD 导出和主权限的管理服务名称,但是为其他用户创建组或为用户分配特定权限的方式看起来不太用户友好,以 sonata admin 为例post 模块管理员服务被命名为 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
对于普通用户来说很难 read/assign 角色有没有更好的方式来表示生成的角色?
添加我自己的答案
在 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>
并在这些服务中定义您的 classes,我使用的演示代码 Acme\DemoBundle
现在 SecurityRolesType
class 依赖于 Sonata 的 EditableRolesBuilder
你必须让它依赖于你自己的 EditableRolesBuilder
Class 所以以同样的方式覆盖依赖奏鸣曲的 RestoreRolesTransformer
到你的 class
我已将所有角色转换为 SecurityRolesType.php
中的一系列模块明智的角色,并将其传递给查看您可以在此文件中查看的所有自定义设置
同时覆盖角色的 twig 模板,您可以通过从 vendor\sonata-project\user-bundle\Resources\views
复制 form_admin_fields.html.twig
并添加 app\Resources\SonataUserBundle\views\Form
路径来覆盖它,它将覆盖父 twig 文件,在我试过的 twig 文件中使用手风琴控件 bootstrap 以明智和适当的权限显示角色模块
Note: This code will only display permissions [Create,Edit,View,List,Export,Delete,Master] it will not handle custom permission
最后一步将您的服务文件导入主配置文件 config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: @AcmeDemoBundle/Resources/config/admin.xml }
有关完整的代码演示,您可以在下面的存储库中找到它
Sonata Admin Enhanced View For Security Roles