插件菜单权限陷阱详解:为什么你的菜单项总对某些用户不可见?

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
插件开发 22 浏览 0 回复

最近在调试插件时发现个典型问题:明明注册了后台菜单,管理员能看到但其他角色却消失。经过排查发现是权限节点声明不完整导致的,分享几个关键细节:

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', '配置权限');
评论0
回复 · 0
还没有回复
微信客服 微信客服