插件菜单权限的致命细节:为什么你的「隐藏菜单」能被用户看到
上周给某CMS写插件时遇到个诡异问题:明明在后台注册菜单时设置了权限节点,但部分低权限用户还是能看到隐藏菜单项。折腾半天才发现是ThinkPHP的权限验证机制在搞鬼 - 菜单可见性检查竟然后于模板渲染!
核心问题出在这三个地方: 1. 菜单注册时没加auth_tag参数(部分老版本框架需要手动声明) 2. 权限节点命名用了中文(路由解析时urlencode导致匹配失败) 3. 菜单缓存没及时更新(特别容易发生在多层级菜单结构)
解决方案其实很简单:
1. 注册菜单时强制带上auth_tag:'auth_tag' => 'plugin_name/menu_id'
2. 用英文+下划线命名权限节点
3. 修改菜单配置后手动执行清除缓存命令
现在遇到更骚的操作是某些开发者直接在前端用v-if判断菜单显隐,结果权限验证形同虚设。建议所有菜单级权限都必须在后端完成校验,前端展示控制顶多算是个体验优化。
最新打赏

