插件菜单权限的隐藏坑:当动态路由遇上二级目录
今天给后台系统加了个「数据报表」插件,菜单注册时明明设置了权限节点,结果测试账号居然能直接访问/vendor/plugin/report路径。排查半天才发现是动态路由和插件二级目录的权限校验冲突。
具体踩坑过程:使用ThinkPHP的MenuService注册菜单时,虽然通过auth_rule表设置了report_view权限节点,但系统路由配置了动态路由匹配(例如/plugin/:name)。当用户访问/plugin/report时,框架先匹配到动态路由规则,直接绕过了权限中间件。
解决方案有两种:1)在插件入口控制器手动调用auth()方法校验权限;2)修改路由注册顺序,把具体插件路由写在动态路由前面。实测第二种方式更优雅,还能避免其他插件出现类似问题。
这个坑给我提了个醒:菜单权限不能只盯着后台左侧导航栏的显隐控制,更要关注实际URL的访问控制。特别是用了第三方插件系统时,那些/vendor/、/plugin/开头的路径往往藏着权限校验的盲区。
最新打赏


QQ官方交流群