kalamu/ menu-service-bundle
提供通过配置来生成knp菜单的服务
Requires
- knplabs/knp-menu-bundle: ^2.0
- symfony/symfony: ^3.0||^4.0
This package is auto-updated.
Last update: 2024-09-14 17:16:19 UTC
README
此包为knp/menu-bundle提供可由配置文件配置的菜单服务。
安装
composer require kalamu/menu-service-bundle:^2.0
在AppKernel.php
中添加以下内容
public function registerBundles() { $bundles = array( ... new Knp\Bundle\MenuBundle\KnpMenuBundle(), new Kalamu\MenuServiceBundle\KalamuMenuServiceBundle(), ); }
如何构建菜单
要构建菜单,您只需在您的app/config/config.yml
文件中添加项目
kalamu_menu_service: menu_name: items: - {label: "Home", route: home_route, icon: '<i class="fa fa-home"></i>' } - {label: "Item 1", route: item1_route, icon: '<i class="fa fa-gear"></i>' } ...
然后,在模板中添加菜单
<div class="my_menu"> {{knp_menu_render('menu_name', {'allow_safe_labels': true})}} </div>
安全性
通过角色限制访问
roles
选项允许根据用户的授权控制项目是否可用。此选项接受一个角色数组。用户必须被授权访问这些角色中的每一个才能查看项目。
示例
kalamu_menu_service: menu_name: items: - {label: "Home", route: home_route, icon: '<i class="fa fa-home"></i>', roles: ['ROLE_USER', 'ROLE_OPEN_DOOR'] }
要访问home
项目,用户必须同时拥有ROLE_USER
和ROLE_OPEN_DOOR
角色。
通过表达式限制访问
'allow_if'选项提供了一种更灵活的方式来处理限制。此选项接受一个表达式作为参数。有关语法信息,请参阅有关如何在安全中使用表达式的文档。
示例
kalamu_menu_service: menu_name: items: - {label: "Home", route: home_route, icon: '<i class="fa fa-home"></i>', allow_if: "has_role('ROLE_USER') or has_role('ROLE_OPEN_DOOR')" }
要访问首页项目,用户必须拥有ROLE_USER
或ROLE_OPEN_DOOR
角色之一。
可以使用roles
选项与allow_if
选项结合使用。在这种情况下,必须满足这两个约束才能授予权限。
通过层次结构限制访问
在具有层次结构项的菜单中,通常父项目在没有其子项的情况下没有意义。因此,如果所有子项对当前用户不可访问,则必须将其删除。
如果存在少数基础角色,可以使用allow_if
选项来处理此问题。但是,如果约束的数量增加,任务将变得毫无必要地繁琐。
hide_if_no_child
选项解决了这个问题。如果设置为true,则项目仅在用户至少可以访问一个子项时才可用。
示例
kalamu_menu_service: menu_name: items: - label: "User management" route: '' hide_if_no_child: true items: - {label: "Users", route: user_list, roles: ['ROLE_MANAGE_USER'] } - {label: "Groups", route: group_list, allow_if: '(user and user.isSuperAdmin())) or user.isGoodManager()' }
自定义
如果您想交互式地更改菜单,可以使用事件kalamu.menu_service.configure.{menu_name}
。有关knp/menu-bundle的更多信息,请参阅https://github.com/KnpLabs/KnpMenuBundle/blob/master/Resources/doc/events.md#create-a-listener