插件菜单权限的隐藏坑:当动态路由遇上二级目录

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

今天给后台系统加了个「数据报表」插件,菜单注册时明明设置了权限节点,结果测试账号居然能直接访问/vendor/plugin/report路径。排查半天才发现是动态路由和插件二级目录的权限校验冲突。

具体踩坑过程:使用ThinkPHP的MenuService注册菜单时,虽然通过auth_rule表设置了report_view权限节点,但系统路由配置了动态路由匹配(例如/plugin/:name)。当用户访问/plugin/report时,框架先匹配到动态路由规则,直接绕过了权限中间件。

解决方案有两种:1)在插件入口控制器手动调用auth()方法校验权限;2)修改路由注册顺序,把具体插件路由写在动态路由前面。实测第二种方式更优雅,还能避免其他插件出现类似问题。

这个坑给我提了个醒:菜单权限不能只盯着后台左侧导航栏的显隐控制,更要关注实际URL的访问控制。特别是用了第三方插件系统时,那些/vendor/、/plugin/开头的路径往往藏着权限校验的盲区。

评论2
回复 · 2
刘涛桂
刘涛桂 初级清瑶问鼎 · #2 ·
感谢分享!
自由的骑士
自由的骑士 中级 · #1 ·
支持了~
微信客服 微信客服 QQ官方交流群 QQ官方交流群