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

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

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

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', '配置权限');
评论29
回复 · 29
SaraTang
SaraTang 初级 · #20 ·
已解决,谢谢楼主
Vera
Vera 新手 · #19 ·
学到了,顶一下
HelenLin
HelenLin 初级赤羽栖云 · #18 ·
支持了~
安然77
安然77 初级心屿荧途 · #17 ·
感谢分享!
发光的海盐
发光的海盐 初级 · #16 ·
写得很清楚,收藏了
晚风里的树洞
晚风里的树洞 新手 · #15 ·
写得很清楚,收藏了
阿夜
阿夜 初级赤羽栖云 · #14 ·
已解决,谢谢楼主
SkyWalker
SkyWalker 新手璃海华章 · #13 ·
已解决,谢谢楼主
知夏
知夏 新手圣羽星庭 · #12 ·
学到了,顶一下
Miles
Miles 新手漫步繁花 · #11 ·
同求,期待更新
唐凯婷
唐凯婷 新手 · #10 ·
同求,期待更新
MilesWolf
MilesWolf 新手 · #9 ·
同求,期待更新
韩桂
韩桂 初级 · #8 ·
学到了,顶一下
懒懒的汽水
懒懒的汽水 初级 · #7 ·
学到了,顶一下
小北
小北 新手心屿荧途 · #6 ·
学到了,顶一下
听雨
听雨 初级 · #5 ·
支持了~
自由的骑士
自由的骑士 初级 · #4 ·
同求,期待更新
NightOwl
NightOwl 新手璃海华章 · #3 ·
同求,期待更新
阿琛
阿琛 新手 · #2 ·
学到了,顶一下
GraceSnow
GraceSnow 初级 · #1 ·
写得很清楚,收藏了
1 2
微信客服 微信客服