Cursor 能生成 CRUD,为什么 Go 后台权限还是会漏:RBAC 菜单和接口要一起验
Cursor 能把一个后台 CRUD 很快写出来但权限经常不是“顺手就对”的东西。页面能打开、列表能查、新增能保存只能说明业务链路通了不能说明角色、菜单、按钮和接口已经绑定到同一套规则里。我更愿意把 AI 生成的后台代码当成半成品。它能省掉重复文件但权限边界必须单独验。最常见的误判是前端菜单隐藏了开发者就以为这个角色没有权限实际接口还在只要知道 URL照样能打到后端。这篇只看一个问题AI 或代码生成器生成 Go 后台 CRUD 后怎么检查 RBAC 权限有没有漏到接口层。示例用 GoFrame 写法SQL 和 curl 可以直接换到自己的项目里跑。先准备一个最小 RBAC 结构后台权限至少要分清四类东西用户、角色、菜单、接口动作。很多项目只做到前三个问题就出在第四个。CREATE TABLE admin_user_role ( user_id BIGINT NOT NULL, role_id BIGINT NOT NULL, PRIMARY KEY (user_id, role_id) ); CREATE TABLE admin_role_menu ( role_id BIGINT NOT NULL, menu_id BIGINT NOT NULL, PRIMARY KEY (role_id, menu_id) ); CREATE TABLE admin_menu ( id BIGINT PRIMARY KEY, parent_id BIGINT DEFAULT 0, title VARCHAR(64) NOT NULL, name VARCHAR(64) NOT NULL, path VARCHAR(128) DEFAULT , api_perm VARCHAR(160) DEFAULT , type VARCHAR(16) NOT NULL );type可以分成menu和button。菜单负责路由显示按钮负责具体动作。关键字段是api_perm比如GET /admin/user/list POST /admin/user/save DELETE /admin/user/delete如果你的后台只靠前端路由控制那就少了这层映射。AI 生成 CRUD 时也容易漏掉它因为提示词通常会说“生成增删改查页面和接口”很少明确说“把每个接口挂到角色菜单权限表上”。一个很容易漏的场景假设运营角色只能看用户列表不能新增、不能删除。前端会把新增按钮隐藏掉页面看起来没问题。但如果后端没有检查接口权限下面这个请求仍然可能成功curl -i http://127.0.0.1:8000/admin/user/save \ -H Authorization: Bearer 运营角色token \ -H Content-Type: application/json \ --data {username:test01,nickname:测试用户}你希望看到的是 403HTTP/1.1 403 Forbidden {code:403,message:无操作权限}如果返回 200就不是前端按钮的问题了。这个角色已经绕过页面限制直接调用了接口。GoFrame 中间件应该检查什么后端不要只判断“登录了没有”。登录校验解决身份问题权限校验解决这个身份能不能做当前动作。下面是一个简化版中间件只保留核心逻辑func AdminPermission(r *ghttp.Request) { user : contexts.GetUser(r.Context()) if user nil { r.Middleware.Next() return } if consts.IsSuperRole(user.RoleKey) { r.Middleware.Next() return } perm : strings.ToUpper(r.Method) r.URL.Path menuIds : findMenuIdsByPerm(r.Context(), perm) if len(menuIds) 0 { r.Middleware.Next() return } ok, err : userHasMenuPermission(r.Context(), user.Id, menuIds) if err ! nil { g.Log().Warningf(r.Context(), 权限校验异常: %v, err) r.Response.WriteStatusExit(500) return } if !ok { r.Response.WriteStatusExit(403) return } r.Middleware.Next() }这里有两个点不能省。第一权限 key 用METHOD path不要只用 path。GET /admin/user和POST /admin/user往往不是同一个权限。第二没有找到权限配置时怎么处理要按项目阶段定。内部后台早期可以放行方便迁移正式上线后更推荐记录日志并逐步收紧否则新接口很容易裸奔。用 SQL 反查角色到底有没有接口权限调权限问题时不要只看页面。直接查表更快。比如用户1001调POST /admin/user/save可以这样查SELECT arm.role_id, arm.menu_id, am.title, am.name, am.api_perm FROM admin_user_role aur JOIN admin_role_menu arm ON arm.role_id aur.role_id JOIN admin_menu am ON am.id arm.menu_id WHERE aur.user_id 1001 AND am.api_perm POST /admin/user/save;有记录说明角色拿到了这个接口动作没有记录就应该拦。再查一下接口本身有没有挂菜单SELECT id, title, name, type, api_perm FROM admin_menu WHERE api_perm POST /admin/user/save;如果这条也查不到说明接口没有进入权限体系。AI 生成了 controller、service、dao但没有补权限元数据这就是典型缺口。新增和编辑共用接口时要特别小心很多后台会把新增和编辑合到一个save接口有id就编辑没有id就新增。页面上是两个按钮后端却是同一个 URL。此时只用POST /admin/user/save映射一个权限会出现“有编辑权限就顺便能新增”的问题。一种做法是在中间件里根据参数区分func resolveAction(r *ghttp.Request, items []permItem) []uint64 { if len(items) 1 { return []uint64{items[0].MenuId} } id : r.Get(id) target : add if id ! nil !id.IsEmpty() id.Int64() 0 { target edit } for _, it : range items { if strings.Contains(strings.ToLower(it.Name), target) { return []uint64{it.MenuId} } } return nil }这个判断看着小但很实用。AI 生成 CRUD 时通常不会主动想到“同一个 save 接口背后对应两个按钮权限”所以这类代码要人工补上或者让代码生成器在模板层就固定生成。发布前至少跑 4 个验证我一般不相信“页面点过没问题”。后台权限要用反向验证。验证项怎么验期望结果未登录访问接口不带 token 调接口401无菜单权限访问页面用低权限角色登录菜单不可见无按钮权限访问接口直接 curl 新增/删除接口403有权限角色访问接口用管理员或授权角色调用200对应的 curl 可以写进项目脚本里TOKEN低权限角色token BASEhttp://127.0.0.1:8000 curl -s -o /tmp/save.out -w %{http_code}\n \ $BASE/admin/user/save \ -H Authorization: Bearer $TOKEN \ -H Content-Type: application/json \ --data {username:no_perm_user} cat /tmp/save.out如果状态码不是 403就继续查admin_menu.api_perm和admin_role_menu。不要先怀疑前端。AI 和代码生成器各自适合做什么AI 适合补样板代码尤其是字段多、接口重复、前后端文件都要改的时候。但权限这种东西有上下文哪个角色能做什么按钮和接口是不是一一对应新增和编辑是否共用 URL接口缺配置时默认放行还是拒绝。这些不是“生成 CRUD”四个字能推出来的。更稳的做法是让生成器负责固定结构让 AI 负责局部修改和解释让测试脚本负责兜底。比如在 XYGo Admin 的真实代码里server/internal/middleware/admin_permission.go已经把METHOD path、角色菜单表和新增/编辑分流放在后端检查server/internal/dao/admin_role_menu.go、server/internal/model/entity/admin_role_menu.go对应角色与菜单关系。需要看源码可以从这里进https://github.com/z312193608/xygo-admin这不是说 AI 不能写后台。恰好相反AI 写后台会越来越常见。只是权限不能停在“页面看起来对”。后台管理系统真正要验的是看不到按钮的人直接打接口也不能成功没有角色关系的人查表也找不到对应菜单动作新增和编辑共用接口时权限仍然能分开。如果只验 CRUD 是否能跑AI 生成的代码会显得很顺。如果把 RBAC、SQL、curl 和日志一起验才知道这个后台能不能给真实用户用。

相关新闻

【CUDA】CUDA 基础实战:向量加法 + 矩阵加法 + 图像灰度化 —— “CPU循环“改写成“kernel“的思维转换

【CUDA】CUDA 基础实战:向量加法 + 矩阵加法 + 图像灰度化 —— “CPU循环“改写成“kernel“的思维转换

一、核心思维转换:从"循环"到"线程" 1.1 CPU程序员的思维习惯 CPU上处理一批数据,本能写法是一个for循环:for (int i = 0; i < N; i++) {c[i] = a[i] + b[i];}这个循环里,"i"是一个不断变化的变量, 同一份代码,被同一个CPU核心,按顺…

2026/7/30 22:39:10 阅读更多 →
思源宋体TTF版本:免费开源中文排版解决方案的完整实战指南

思源宋体TTF版本:免费开源中文排版解决方案的完整实战指南

思源宋体TTF版本&#xff1a;免费开源中文排版解决方案的完整实战指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找专业又免费的中文字体而烦恼吗&#xff1f;So…

2026/7/31 19:24:36 阅读更多 →
暑期实践日志 Day5:完成开题报告提交,继续学习视频剪辑操作

暑期实践日志 Day5:完成开题报告提交,继续学习视频剪辑操作

一、今日目标 今天是课题准备的最后一天&#xff0c;首要任务是整理、完善并正式提交本课题的暑期实践开题报告&#xff0c;敲定课题整体规划、实践方向和后续进度安排。 同时按照昨天制定的学习计划&#xff0c;推进一下剪映实操练习&#xff0c;在掌握字幕、降噪、画面裁剪的…

2026/7/30 0:12:36 阅读更多 →

最新新闻

如何用DankDroneDownloader实现大疆无人机固件降级:完整专业指南

如何用DankDroneDownloader实现大疆无人机固件降级:完整专业指南

如何用DankDroneDownloader实现大疆无人机固件降级&#xff1a;完整专业指南 【免费下载链接】DankDroneDownloader A Custom Firmware Download Tool for DJI Drones Written in C# 项目地址: https://gitcode.com/gh_mirrors/da/DankDroneDownloader DankDroneDownloa…

2026/8/1 3:10:56 阅读更多 →
终极直播输入显示指南:Input Overlay 免费插件完整教程

终极直播输入显示指南:Input Overlay 免费插件完整教程

终极直播输入显示指南&#xff1a;Input Overlay 免费插件完整教程 【免费下载链接】input-overlay Show keyboard, gamepad and mouse input on stream 项目地址: https://gitcode.com/gh_mirrors/in/input-overlay Input Overlay 是一款专为 OBS Studio 设计的开源插件…

2026/8/1 3:10:56 阅读更多 →
中小律所数字化转型:零代码管理软件的核心优势

中小律所数字化转型:零代码管理软件的核心优势

1. 为什么中小律所需要专属管理软件在传统办公模式下&#xff0c;中小律所普遍面临着案件管理混乱、文书归档无序、日程安排冲突等典型痛点。我接触过不少10人以下的律所团队&#xff0c;发现他们最常使用的"管理工具"竟然是Excel表格加纸质笔记本的组合。这种工作方…

2026/8/1 3:10:56 阅读更多 →
Spring Boot+Vue+UniApp医院挂号小程序全栈开发实战指南

Spring Boot+Vue+UniApp医院挂号小程序全栈开发实战指南

这次我们来看一个完整的医院挂号预约小程序项目。这个项目基于 Spring Boot Vue UniApp 技术栈&#xff0c;是一个典型的“前后端分离 跨端小程序”的实战案例&#xff0c;非常适合作为计算机相关专业的毕业设计、课程设计&#xff0c;或者用于学习全栈开发流程。项目最核心…

2026/8/1 3:10:56 阅读更多 →
风光储互补微电网Simulink建模与优化实践

风光储互补微电网Simulink建模与优化实践

1. 风光储互补微电网的核心价值与挑战微电网作为分布式能源的重要载体&#xff0c;正在重塑传统电力系统的格局。而风光储互补系统通过整合光伏发电、风力发电和储能电池&#xff0c;形成了一个具有高度自主性的供电单元。这种系统在偏远地区供电、岛屿电网、重要设施备用电源等…

2026/8/1 3:10:56 阅读更多 →
Akagi雀魂助手:3步掌握麻将AI智能辅助,从新手到高手的终极指南

Akagi雀魂助手:3步掌握麻将AI智能辅助,从新手到高手的终极指南

Akagi雀魂助手&#xff1a;3步掌握麻将AI智能辅助&#xff0c;从新手到高手的终极指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將&#xff0c;能夠使用自定義的AI模型實時分析對局並給出建議&#xff0c;內建Mortal AI作為示例。 Supports Majsoul, Tenhou,…

2026/8/1 3:09:56 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →