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

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

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

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

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

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

评论0
回复 · 0
还没有回复
微信客服 微信客服