插件菜单权限的致命细节:为什么你的「隐藏菜单」能被用户看到

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 76 浏览 16 回复

上周给某CMS写插件时遇到个诡异问题:明明在后台注册菜单时设置了权限节点,但部分低权限用户还是能看到隐藏菜单项。折腾半天才发现是ThinkPHP的权限验证机制在搞鬼 - 菜单可见性检查竟然后于模板渲染!

核心问题出在这三个地方: 1. 菜单注册时没加auth_tag参数(部分老版本框架需要手动声明) 2. 权限节点命名用了中文(路由解析时urlencode导致匹配失败) 3. 菜单缓存没及时更新(特别容易发生在多层级菜单结构)

解决方案其实很简单: 1. 注册菜单时强制带上auth_tag:'auth_tag' => 'plugin_name/menu_id' 2. 用英文+下划线命名权限节点 3. 修改菜单配置后手动执行清除缓存命令

现在遇到更骚的操作是某些开发者直接在前端用v-if判断菜单显隐,结果权限验证形同虚设。建议所有菜单级权限都必须在后端完成校验,前端展示控制顶多算是个体验优化。

评论16
回复 · 16
Chase
Chase 新手麟宫绮梦 · #16 ·
感谢分享!
GraceWei
GraceWei 初级 · #15 ·
已解决,谢谢楼主
OpenField
OpenField 初级流金绮梦 · #14 ·
学到了,顶一下
马凯桂
马凯桂 新手赤羽栖云 · #13 ·
已解决,谢谢楼主
Nina
Nina 初级 · #12 ·
感谢分享!
予安
予安 初级 · #11 ·
写得很清楚,收藏了
YukiRain
YukiRain 新手 · #10 ·
支持了~
安静的星星
安静的星星 新手漫步繁花 · #9 ·
学到了,顶一下
KateStar
KateStar 初级 · #8 ·
感谢分享!
NoahLee
NoahLee 新手麟宫绮梦 · #7 ·
感谢分享!
Paul
Paul 新手 · #6 ·
写得很清楚,收藏了
小棠
小棠 初级 · #5 ·
支持了~
小小的树洞
小小的树洞 新手璃梦花海 · #4 ·
学到了,顶一下
JoelSky
JoelSky 新手番响心动 · #3 ·
支持了~
知夏45
知夏45 新手清瑶问鼎 · #2 ·
学到了,顶一下
小满
小满 新手番响心动 · #1 ·
学到了,顶一下
微信客服 微信客服 QQ官方交流群 QQ官方交流群