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

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
插件开发 153 浏览 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
Zane
Zane 初级 · #9 ·
支持了~
温柔的橙子
温柔的橙子 新手麟宫绮梦 · #8 ·
感谢分享!
CoolKid
CoolKid 新手漫步繁花 · #7 ·
感谢分享!
EdenLin
EdenLin 初级 · #6 ·
学到了,顶一下
Joel
Joel 初级清瑶问鼎 · #5 ·
同求,期待更新
🐱汽水🎐
🐱汽水🎐 新手星灿心语 · #4 ·
写得很清楚,收藏了
徐超悦
徐超悦 初级清瑶问鼎 · #3 ·
感谢分享!
BrightPath
BrightPath 初级 · #2 ·
同求,期待更新
WadeWave
WadeWave 新手 · #1 ·
支持了~
1 2
微信客服 微信客服