插件菜单注册完,权限节点在 `auth_rule` 里明明有记录,可超管账号进去就是看不到——我花了四十分钟才想起来检查 `menu` 表的 `type` 字段

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

上周给后台装一个新插件,流程走得挺顺:配置文件写了 `menu.php`,`auth_rule` 批量插入了节点,清除缓存、重登账号,一气呵成。结果点进后台,左侧栏空空如也,仿佛这个插件从来没存在过。

我第一反应是缓存没清干净,宝塔里把 `runtime` 目录删了三遍,Redis `flushall` 两次,甚至怀疑是浏览器本地存储搞鬼,换无痕模式再登——还是一样。

然后开始逐行对 `auth_rule`。名称、路由、层级、PID,逐个字段比对,眼睛都快看花了,确认没写错。又回去检查 `menu.php` 里的 `name` 和 `auth_rule` 表里的 `name` 是否对应,大小写、下划线、连字符,全对上了。

最后实在没辙,打开数据库直接 `SELECT * FROM menu WHERE plugin = 'xxx'`,记录明明在啊!但再往下扫一眼,发现 `type` 字段的值是 `2`。我们这套系统里,`type` 1 代表系统菜单,2 代表仅作为权限节点、不渲染到侧边栏。我当时复制粘贴了另一个纯权限节点的配置,忘了把这行改回 `1`。

就这一个数字,菜单在数据库里躺着,在权限校验里活着,在用户眼前彻底死了。更讽刺的是,这种"幽灵节点"不会触发任何报错,日志里安安静静,仿佛一切正常。

后来我在插件安装自检里加了个小脚本:注册完菜单后,遍历一遍 `type=1` 且 `status=1` 的节点,如果前端菜单树里渲染不出来,直接抛警告。至少下次再手滑,我能第一时间知道是"看得见摸不着"的问题,而不是在缓存和权限之间兜圈子。

你们有没有遇到过这种"数据在、权限过、界面无"的三体问题?最后查出来是什么字段在搞事情?

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