插件菜单权限陷阱详解:为什么你的菜单项总对某些用户不可见?
最近在调试插件时发现个典型问题:明明注册了后台菜单,管理员能看到但其他角色却消失。经过排查发现是权限节点声明不完整导致的,分享几个关键细节:
1. 权限节点必须与菜单路由严格对应。比如你的菜单路由是
/admin/plugin/my_plugin/config那么权限节点至少要声明到
admin/plugin/my_plugin层级,否则子路由会继承失败
2. 多级菜单需要逐级声明权限。例如:
// 错误示范:只声明了末级权限
$auth->add('admin/plugin/my_plugin/advanced', '高级设置权限');
// 正确做法:父级菜单也要声明
$auth->add('admin/plugin/my_plugin', '基础权限');
$auth->add('admin/plugin/my_plugin/basic', '基础设置权限');
3. 使用route别名时要特别注意。如果通过
Route::alias()定义了路由别名,权限节点必须使用原始路由路径,别名路径不会触发权限校验
实际案例:我们有个插件因为使用了
Route::group分组路由,但权限节点声明时漏了group前缀,导致整个菜单组对非管理员不可见。修正方案是在注册权限时保持完整的路由链:
// 路由定义
Route::group('my_group', function(){
Route::rule('config','controller/config');
});
// 权限节点必须包含group前缀
$auth->add('my_group/config', '配置权限');
最新打赏

