feat(day2): 更新课件

This commit is contained in:
smart
2026-06-12 18:25:01 +08:00
parent bbe619d386
commit 4e1829fa08
12 changed files with 762 additions and 17 deletions
+4 -4
View File
@@ -73,7 +73,7 @@ background: https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1920&q=8
</div> </div>
<div class="mt-6 text-sm text-gray-400 text-center"> <div class="mt-6 text-sm text-gray-400 text-center">
今天要把这些隐性开发要求写成中文规则,让 TRAE 长期遵守 今天要把这些隐性开发要求写成规则,让 TRAE 长期遵守
</div> </div>
--- ---
@@ -299,7 +299,7 @@ background: https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1920&q=8
--- ---
# 模块 5:.trae/rules.md 中文安全规则 # 模块 5:.trae/rules.md 安全规则
<div class="mt-4 space-y-3 text-sm"> <div class="mt-4 space-y-3 text-sm">
@@ -498,7 +498,7 @@ layout: center
<div class="card-blue p-3">02 上下文引用模板</div> <div class="card-blue p-3">02 上下文引用模板</div>
<div class="card-blue p-3">03 幻觉控制 Prompt</div> <div class="card-blue p-3">03 幻觉控制 Prompt</div>
<div class="card-blue p-3">04 .gitignore 配置样例</div> <div class="card-blue p-3">04 .gitignore 配置样例</div>
<div class="card-green p-3">05 若依中文安全规则</div> <div class="card-green p-3">05 若依安全规则</div>
<div class="card-green p-3">06 若依编码测试规则</div> <div class="card-green p-3">06 若依编码测试规则</div>
<div class="card-green p-3">07 若依前端规则</div> <div class="card-green p-3">07 若依前端规则</div>
<div class="card-amber p-3">08 若依 AI 资产库目录</div> <div class="card-amber p-3">08 若依 AI 资产库目录</div>
@@ -531,7 +531,7 @@ layout: center
- 组织上下文 — 精准任务五要素 - 组织上下文 — 精准任务五要素
- 控制幻觉 — 证据→原因→方案 - 控制幻觉 — 证据→原因→方案
- 编写 rules — 中文可执行规则 - 编写 rules — 可执行规则
- 沉淀资产 — 团队长期复用 - 沉淀资产 — 团队长期复用
</div> </div>
+92 -1
View File
@@ -38,7 +38,7 @@
<!-- <!--
若依这类后台系统,最容易出现的问题不是页面不好看,而是权限、日志、接口边界和生成代码质量。 若依这类后台系统,最容易出现的问题不是页面不好看,而是权限、日志、接口边界和生成代码质量。
AI 可能在页面里直接新增接口调用;只做前端按钮隐藏;没有检查后端权限注解;新增敏感操作但没有操作日志;用代码生成器生成 CRUD 后直接上线。 AI 可能在页面里直接新增接口调用;只做前端按钮隐藏;没有检查后端权限注解;新增敏感操作但没有操作日志;用代码生成器生成 CRUD 后直接上线。
今天要把这些隐性开发要求写成中文规则,让 TRAE 在后续协作中长期遵守。 今天要把这些隐性开发要求写规则,让 TRAE 在后续协作中长期遵守。
--> -->
--- ---
@@ -72,6 +72,40 @@ AI 可能在页面里直接新增接口调用;只做前端按钮隐藏;没
--- ---
# 第 2 天训练主线
<div class="grid grid-cols-4 gap-3 mt-6 text-sm">
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">
<div class="font-bold mb-1">1. 组织上下文</div>
<div class="text-xs text-gray-400">把任务、范围、文件和验收讲清楚</div>
</div>
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
<div class="font-bold mb-1">2. 收集证据</div>
<div class="text-xs text-gray-400">让 TRAE 先找文件、函数、注解和调用链</div>
</div>
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">
<div class="font-bold mb-1">3. 写成 rules</div>
<div class="text-xs text-gray-400">把隐性要求变成可执行约束</div>
</div>
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30">
<div class="font-bold mb-1">4. 资产化复用</div>
<div class="text-xs text-gray-400">沉淀 Prompt、清单、模板和验收标准</div>
</div>
</div>
<div class="mt-6 p-4 rounded-xl bg-white/5 border border-white/10 text-sm">
<strong>课堂总产出:</strong>围绕若依“用户管理删除权限”完成一次证据审查,并产出一版可落地的 <code>.trae/rules.md v0.1</code>。
</div>
<!--
第二天的训练不是单独讲规则,而是按真实工作流推进。
先把任务上下文讲清楚,再让 TRAE 收集证据,然后把证据转成规则,最后沉淀成团队资产。
今天我们用一个贯穿案例:用户管理删除权限。
学员最后要拿走的不只是 Prompt,而是一套能复用的 rules、检查清单和验收模板。
-->
---
# 模块 1:若依任务为什么要讲清楚? # 模块 1:若依任务为什么要讲清楚?
<div class="mt-6 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm"> <div class="mt-6 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
@@ -110,6 +144,39 @@ AI 可能在页面里直接新增接口调用;只做前端按钮隐藏;没
--- ---
# 贯穿案例:用户管理删除权限审查
<div class="grid grid-cols-2 gap-5 mt-6 text-sm">
<div class="p-4 rounded-xl bg-blue-500/10 border border-blue-500/30">
<div class="font-bold mb-2">业务动作</div>
<div>管理员在用户管理页面删除用户。</div>
<div class="text-xs text-gray-400 mt-2">前端按钮、接口调用、后端权限、操作日志都会被牵连。</div>
</div>
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
<div class="font-bold mb-2">训练目标</div>
<div>让 TRAE 不凭印象判断,而是按证据给出风险、修改建议和验证方式。</div>
</div>
</div>
<div class="mt-5 text-sm">
| 审查点 | 必须找到的证据 |
|---|---|
| 前端按钮 | 页面路径、权限字符、按钮显示判断 |
| 后端接口 | Controller 方法、权限注解、请求路径 |
| 操作审计 | 日志注解、操作类型、异常路径 |
| 验证方式 | 无权限账号、正常账号、日志查询 |
</div>
<!--
后面所有 Prompt 和 rules 都围绕同一个案例展开。
用户管理删除权限很适合教学,因为它同时涉及前端按钮权限、后端接口权限、操作日志和验证方式。
我们不是让 AI 泛泛讲安全,而是让它在这个动作上找证据。
-->
---
# 若依坏 Prompt 示例 # 若依坏 Prompt 示例
<div class="mt-6 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm"> <div class="mt-6 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
@@ -155,6 +222,30 @@ AI 可能在页面里直接新增接口调用;只做前端按钮隐藏;没
--- ---
# 上下文包模板
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
```md
任务:审查若依用户管理删除权限是否完整
范围:用户管理页面、用户 API、后端用户 Controller/Service、操作日志相关代码
不做:不要修改代码;不要输出泛泛安全建议;不要猜测未看到的实现
必须标注:文件路径、函数/方法名、权限字符、注解、无法确认项
输出:证据表 + 风险判断 + 修改建议 + 验证步骤
验收:至少覆盖前端按钮、后端接口、权限注解、操作日志、无权限访问验证
```
</div>
<!--
这是今天反复使用的上下文包模板。
真实工作里,不要只把一句话丢给 AI。
先把任务、范围、不做什么、必须标注什么、输出格式和验收标准写清楚。
这能显著减少 AI 自由发挥。
-->
---
# 上下文组织清单 # 上下文组织清单
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
+44 -1
View File
@@ -22,6 +22,27 @@
--- ---
# 最后 30 分钟:交付验收会
<div class="mt-5 text-sm">
| 时间 | 动作 | 输出 |
|---|---|---|
| 10 分钟 | 小组整理上下文包、证据表、rules 草案 | 一份 v0.1 规则草案 |
| 10 分钟 | 交叉 Review:用“四问”检查可执行性 | 改写建议 |
| 5 分钟 | 补充验证步骤 | 无权限、正常、日志验证 |
| 5 分钟 | 选出可进入团队资产库的条款 | 候选 rules |
</div>
<!--
课程最后不要只做口头总结。
建议安排 30 分钟交付验收会。
每组拿出自己的上下文包、证据表和 rules 草案,用四问互评,最后选出可以进入团队资产库的条款。
-->
---
# 第 2 天交付物 # 第 2 天交付物
<div class="grid grid-cols-2 gap-3 mt-6 text-sm"> <div class="grid grid-cols-2 gap-3 mt-6 text-sm">
@@ -29,7 +50,7 @@
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">02 上下文引用模板</div> <div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">02 上下文引用模板</div>
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">03 幻觉控制 Prompt</div> <div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">03 幻觉控制 Prompt</div>
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">04 gitignore 忽略配置样例</div> <div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">04 gitignore 忽略配置样例</div>
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">05 若依中文安全规则</div> <div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">05 若依安全规则</div>
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">06 若依编码测试规则</div> <div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">06 若依编码测试规则</div>
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">07 若依前端规则</div> <div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">07 若依前端规则</div>
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">08 若依 AI 资产库目录</div> <div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">08 若依 AI 资产库目录</div>
@@ -43,6 +64,28 @@
以后团队在若依或类似后台系统中使用 TRAE,就可以复用这些清单、Prompt、规则和模板。 以后团队在若依或类似后台系统中使用 TRAE,就可以复用这些清单、Prompt、规则和模板。
--> -->
---
# 交付物验收标准
<div class="mt-5 text-sm">
| 交付物 | 通过标准 |
|---|---|
| 上下文组织清单 | 有目标、范围、约束、输出、验收和不确定点 |
| 证据收集 Prompt | 要求先找证据,且禁止直接修改代码 |
| rules.md v0.1 | 每条规则能回答触发场景、必须动作、禁止动作、验收方式 |
| 代码生成 Review 清单 | 覆盖权限、日志、校验、异常、测试 |
| 资产库目录 | 有 prompts、rules、templates、checklists、examples |
</div>
<!--
交付物要有验收标准。
否则课程结束后大家只是拿到一堆材料,不知道什么算合格。
这页可以作为讲师最后收作业的标准。
-->
--- ---
layout: center layout: center
class: text-center class: text-center
+103
View File
@@ -29,6 +29,31 @@
--- ---
# 上下文选择决策树
<div class="mt-6 text-sm">
| 你现在的问题 | 优先引用 | 典型指令 |
|---|---|---|
| 不知道入口在哪 | @workspace | 先找相关文件和函数,不要下结论 |
| 已经知道关键文件 | #File | 分析这些文件之间的调用关系 |
| 某个函数行为不清 | #Code | 拆参数、分支、异常和副作用 |
| 项目内没有依据 | #Web | 查框架资料,再回代码验证 |
</div>
<div class="mt-4 p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
<strong>判断原则:</strong>先宽后窄,先找路再聚焦,先项目证据再外部资料。
</div>
<!--
很多学员会一上来就 @workspace 问一个大问题,也有人直接把单个文件给 AI。
这里要训练一个选择顺序。
不知道入口时先用 @workspace 找路;入口明确后用 #File 聚焦;函数细节再用 #Code;外部资料只能补充背景,不能替代项目事实。
-->
---
# @workspace 找路示例 # @workspace 找路示例
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
@@ -49,6 +74,30 @@
--- ---
# @workspace 输出验收
<div class="mt-5 text-sm">
| 合格输出 | 不合格输出 |
|---|---|
| 列出文件路径和函数/类名 | 只说“大概在权限模块” |
| 区分前端、后端、配置文件 | 把前后端逻辑混在一起 |
| 标注依据和不确定点 | 直接给安全结论 |
| 给出下一步建议引用哪些文件 | 一次性要求 AI 修改代码 |
</div>
<div class="mt-5 p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
课堂要求:每组至少让 TRAE 找出 3 个前端文件、2 个后端文件、1 个权限或日志相关依据。
</div>
<!--
@workspace 的目标不是马上解决问题,而是建立地图。
如果 AI 只给结论,没有路径、函数和不确定点,就说明上下文还没有收敛。
-->
---
# #File 聚焦示例 # #File 聚焦示例
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
@@ -69,6 +118,31 @@
--- ---
# #File 调用链模板
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
```md
#File 请基于已选文件输出调用链:
1. 入口动作:用户点击了什么
2. 前端函数:调用哪个 API 方法
3. 请求接口:method + url
4. 后端入口:Controller 类和方法
5. 业务处理:Service/Mapper 关键方法
6. 权限与日志:注解、拦截器或 AOP 依据
7. 不确定点:哪些文件仍需补充引用
```
</div>
<!--
这个模板适合从文件集合里整理调用链。
它强制 TRAE 按“入口动作、前端函数、请求接口、后端入口、业务处理、权限日志、不确定点”的顺序输出,避免直接跳到结论。
-->
---
# #Code 抠细节示例 # #Code 抠细节示例
<div class="mt-4 p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
@@ -89,6 +163,35 @@
--- ---
# #Code 细节检查清单
<div class="grid grid-cols-2 gap-4 mt-6 text-sm">
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">
<div class="font-bold mb-1">输入</div>
<div>参数来源、默认值、空值、权限字符</div>
</div>
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">
<div class="font-bold mb-1">分支</div>
<div>成功、失败、取消、异常、无权限</div>
</div>
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">
<div class="font-bold mb-1">副作用</div>
<div>token、store、路由、列表刷新、日志</div>
</div>
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">
<div class="font-bold mb-1">恢复</div>
<div>loading、弹窗、错误提示、状态回滚</div>
</div>
</div>
<!--
#Code 不是让 AI 重写函数,而是拆细节。
尤其要看失败分支和副作用。
很多页面问题不是主流程错,而是异常后 loading 不恢复、状态不刷新、错误提示缺失。
-->
---
# #Web 使用边界 # #Web 使用边界
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
+99
View File
@@ -44,6 +44,31 @@
--- ---
# 证据矩阵:事实、推测、不确定
<div class="mt-5 text-sm">
| 类型 | 判断标准 | 输出写法 |
|---|---|---|
| 已确认事实 | 能指向文件、函数、注解、配置或测试结果 | “在 xxxController#remove 看到 @PreAuthorize...” |
| 合理推测 | 有局部证据,但缺少完整链路 | “可能依赖全局拦截器,仍需查看配置” |
| 无法确认 | 当前上下文没有证据 | “未引用到日志 AOP,暂不能判断是否记录日志” |
</div>
<div class="mt-4 p-3 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
<strong>课堂红线:</strong>没有证据时,禁止写“已完成”“一定安全”“肯定没有问题”。
</div>
<!--
幻觉控制的关键,是让 AI 学会把事实、推测和无法确认分开。
只要能指向文件、函数、注解或配置,才叫事实。
有部分依据但链路不完整,只能叫推测。
上下文里没有看到,就必须写无法确认。
-->
---
# 若依证据收集 Prompt # 若依证据收集 Prompt
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
@@ -70,6 +95,29 @@
--- ---
# 证据表输出模板
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
```md
| 审查项 | 证据位置 | 证据内容 | 结论等级 | 不确定点 |
|---|---|---|---|---|
| 前端删除按钮 | 文件 + 行为 | 权限字符/显示条件 | 已确认/推测/未知 | 需要补充什么 |
| 后端删除接口 | Controller + 方法 | 请求路径/权限注解 | 已确认/推测/未知 | 需要补充什么 |
| 操作日志 | 注解/AOP/配置 | 日志类型/触发条件 | 已确认/推测/未知 | 需要补充什么 |
| 验证方式 | 测试步骤 | 账号/操作/预期结果 | 已确认/待执行 | 需要谁确认 |
```
</div>
<!--
这是建议学员要求 TRAE 输出的表格。
表格让证据可复查,也方便讲师点评。
如果某一列空白,就说明 AI 还没有真正完成证据审查。
-->
---
# 原因判断 Prompt # 原因判断 Prompt
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
@@ -93,6 +141,29 @@
--- ---
# 追问模板:把 AI 拉回证据
<div class="mt-4 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
```md
你刚才的结论缺少代码依据。
请重新输出:
1. 每条结论对应的文件路径和函数/注解
2. 哪些是已确认事实,哪些只是推测
3. 哪些文件还需要我补充引用
4. 在证据不足前不要给最终安全结论
```
</div>
<!--
当 AI 开始空泛总结时,不要继续追问“那怎么改”。
先用这个追问模板把它拉回证据。
这也是团队 rules 里应该写进去的一条:证据不足时,必须先请求补充上下文。
-->
---
# 方案生成 Prompt # 方案生成 Prompt
<div class="mt-4 p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
@@ -111,3 +182,31 @@
如果敏感操作缺少日志,才建议补操作日志。 如果敏感操作缺少日志,才建议补操作日志。
每个方案都要说明文件、方法、影响范围、验证方式和测试建议。 每个方案都要说明文件、方法、影响范围、验证方式和测试建议。
--> -->
---
# 幻觉控制验收
<div class="grid grid-cols-2 gap-4 mt-6 text-sm">
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
<div class="font-bold mb-2">通过</div>
- 结论能追溯到文件/函数/注解
- 风险分为事实、推测、未知
- 修改建议包含影响范围
- 验证步骤能被人工执行
</div>
<div class="p-4 rounded-xl bg-red-500/10 border border-red-500/30">
<div class="font-bold mb-2">不通过</div>
- 只有“建议加强权限”这类空话
- 把前端按钮隐藏当安全边界
- 看不到后端代码却断言接口安全
- 没有无权限账号验证步骤
</div>
</div>
<!--
第三模块结束时,学员应该知道什么叫“靠谱的 AI 输出”。
不是文字长,而是能追溯、能区分不确定、能执行验证。
-->
+62 -3
View File
@@ -2,9 +2,10 @@
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
- .env · application-dev.yml 中真实密码 · 数据库账号 · Redis 密码 - 真实配置:.env · application-dev.yml 中真实密码 · 数据库账号 · Redis 密码
- target/ · node_modules/ · dist/ - 构建产物:target/ · node_modules/ · dist/
- 日志文件 · IDE 本地配置 - 本地痕迹:日志文件 · IDE 本地配置 · 临时导入导出文件
- AI 上下文:不要把密钥、客户数据、生产日志喂给 AI
</div> </div>
<!-- <!--
@@ -15,6 +16,27 @@
--- ---
# 忽略配置审查流程
<div class="mt-5 text-sm">
| 步骤 | TRAE 要做什么 | 人要确认什么 |
|---|---|---|
| 1. 找文件 | 搜索 .gitignore、配置文件、日志目录 | 是否覆盖前后端两个工程 |
| 2. 判风险 | 标出真实密钥、账号、IP、生产日志 | 是否误报示例配置 |
| 3. 给建议 | 只输出新增忽略项和理由 | 是否会误忽略必要模板 |
| 4. 再修改 | 经确认后再改 .gitignore | 是否保留 example/sample 文件 |
</div>
<!--
忽略配置不能让 AI 直接一把改完。
先找文件,再判风险,再给建议,最后经人工确认修改。
特别要注意,真实配置要忽略,但 example 或 sample 模板要保留,否则新人无法启动项目。
-->
---
# 若依忽略配置检查 Prompt # 若依忽略配置检查 Prompt
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
@@ -32,3 +54,40 @@
重点看后端 target、前端 node_modules 和 dist、日志文件、本地配置、数据库密码、Redis 密码、IDE 配置。 重点看后端 target、前端 node_modules 和 dist、日志文件、本地配置、数据库密码、Redis 密码、IDE 配置。
同样,不要让 AI 直接改,先给审查报告。 同样,不要让 AI 直接改,先给审查报告。
--> -->
---
# .gitignore 建议样例
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
```text
# backend build
target/
*.log
logs/
# frontend build
node_modules/
dist/
.vite/
# local secrets
.env
.env.local
application-*.local.yml
# IDE
.idea/
.vscode/
*.iml
```
</div>
<!--
这是一个示例,不要求所有项目完全照抄。
讲师要提醒学员:忽略项要结合项目实际路径检查。
尤其 application-dev.yml 是否提交,要看团队是否把它当模板用。
真实密码必须移除,模板配置可以改成占位符后保留。
-->
+71 -2
View File
@@ -2,7 +2,7 @@
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
账号密码 · Token · 接口权限注解 · 菜单与按钮权限 · 数据权限 · 操作日志 · 敏感配置 · 日志脱敏 账号密码 · Token · 接口权限注解 · 菜单与按钮权限 · 数据权限 · 操作日志 · 敏感配置 · 日志脱敏 · 导入导出
</div> </div>
@@ -14,7 +14,28 @@
--- ---
# 中文安全规则示例 # 安全规则写法
<div class="mt-5 text-sm">
| 规则组成 | 写法 | 示例 |
|---|---|---|
| 触发场景 | 哪类文件/功能/接口触发 | 用户、角色、菜单、部门、岗位 |
| 必须动作 | AI 必须检查或执行什么 | 检查 Controller 权限注解 |
| 禁止动作 | AI 不能偷懒或绕过什么 | 不能只做前端按钮隐藏 |
| 验收方式 | 怎么确认规则被遵守 | 文件路径、注解、无权限测试 |
</div>
<!--
规则不能只写“注意安全”。
可执行规则至少要包含触发场景、必须动作、禁止动作和验收方式。
这样 TRAE 才知道什么时候触发规则、要做什么、不能做什么,以及输出要证明什么。
-->
---
# 安全规则示例
<div class="mt-4 space-y-3 text-sm"> <div class="mt-4 space-y-3 text-sm">
<div class="p-3 rounded-lg bg-blue-900/20 border border-blue-500/30">前端按钮权限只能作为交互控制,不能作为安全边界</div> <div class="p-3 rounded-lg bg-blue-900/20 border border-blue-500/30">前端按钮权限只能作为交互控制,不能作为安全边界</div>
@@ -32,6 +53,30 @@
--- ---
# 权限与日志 rules 片段
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
```md
## 权限与审计规则
- 涉及用户、角色、菜单、部门、岗位的新增、修改、删除、导出接口时,
必须检查后端 Controller 是否有权限控制,不能只依赖前端按钮权限。
- 涉及新增、修改、删除、导入、导出等敏感操作时,
必须检查是否记录操作日志,并说明日志注解或 AOP 依据。
- 如果当前上下文无法确认权限或日志实现,必须标注“不确定”,
并请求补充 Controller、Service、权限配置或日志切面相关文件。
```
</div>
<!--
这段可以直接作为 .trae/rules.md 的雏形。
它比“注意权限安全”更好,因为它规定了触发场景、必须检查的对象、不能依赖的东西,以及上下文不足时怎么处理。
-->
---
# 敏感配置规则 # 敏感配置规则
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
@@ -47,3 +92,27 @@
不得提交真实 application-dev.yml、.env、本地配置文件。 不得提交真实 application-dev.yml、.env、本地配置文件。
示例配置必须使用占位符。 示例配置必须使用占位符。
--> -->
---
# 安全规则课堂练习
<div class="mt-5 text-sm">
| 小组任务 | 产出 |
|---|---|
| 选择一个敏感动作 | 删除用户、导出用户、重置密码任选一个 |
| 用上下文包提问 | 要求 TRAE 先收集证据,不改代码 |
| 抽取安全规则 | 写出 3 条可执行 rules |
| 设计验证步骤 | 正常账号、无权限账号、日志检查各 1 条 |
</div>
<div class="mt-4 p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
验收:规则必须能回答“什么时候触发、检查哪里、怎么证明、证据不足怎么办”。
</div>
<!--
这个练习把安全规则从讲师示例变成学员产出。
每组选择一个敏感动作,先做证据收集,再抽取规则,最后写验证步骤。
-->
+68
View File
@@ -18,6 +18,50 @@
--- ---
# 编码 rules 片段
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
```md
## 若依编码规则
- 前端页面不得直接手写请求地址;新增接口调用必须放入对应 api 模块。
- 后端新增业务必须保持 Controller -> Service -> Mapper 分层,不得把 SQL 或复杂业务逻辑写入 Controller。
- 新增枚举/状态类字段时,优先检查项目是否已有字典配置;不要在页面硬编码展示文本。
- 代码生成结果必须经过权限、日志、校验、异常处理和测试审查后才能合入。
```
</div>
<!--
这里给出的是编码规则的可落地版本。
它不是抽象说“代码要规范”,而是明确若依前后端分层、字典使用和代码生成后的审查要求。
-->
---
# 代码生成 Review 清单
<div class="mt-5 text-sm">
| 检查项 | 必看位置 | 常见问题 |
|---|---|---|
| 权限控制 | Controller、菜单权限字符 | 只生成页面,没配后端权限 |
| 操作日志 | 新增/修改/删除/导出方法 | 敏感操作缺日志 |
| 表单校验 | 前端 rules、后端参数校验 | 前端校验有,后端缺 |
| 数据权限 | 列表查询、部门/用户过滤 | 不同角色看到同一批数据 |
| 异常处理 | Service、前端 catch/finally | 失败后 loading 不恢复 |
</div>
<!--
若依代码生成器能提高效率,但生成结果不能直接上线。
这张清单就是让 AI 和人工一起做生成代码 Review。
讲师可以要求学员把它放进 checklists 目录。
-->
---
# 若依测试规则重点 # 若依测试规则重点
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
@@ -41,3 +85,27 @@
敏感操作要验证操作日志记录。 敏感操作要验证操作日志记录。
代码生成 CRUD 要验证增删改查、权限和日志。 代码生成 CRUD 要验证增删改查、权限和日志。
--> -->
---
# 测试 Prompt 模板
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
```md
@workspace 请为“用户管理删除用户”设计测试清单。
要求:
1. 覆盖正常删除、取消删除、删除失败
2. 覆盖无权限账号访问后端删除接口
3. 覆盖删除后列表刷新和错误提示
4. 覆盖操作日志是否记录
5. 输出表格:场景、前置条件、操作步骤、预期结果、验证位置
```
</div>
<!--
测试规则也要能落到 Prompt。
让 TRAE 设计测试清单时,必须要求它覆盖权限、前端状态、日志和失败分支。
这比让它泛泛“写测试用例”可靠得多。
-->
+65
View File
@@ -20,6 +20,27 @@ api 目录调用 · 权限指令 · 动态路由 · 列表 loading · 表单校
--- ---
# 前端改动流程
<div class="mt-5 text-sm">
| 阶段 | TRAE 应先做什么 | 不允许什么 |
|---|---|---|
| 找入口 | 找页面、api 模块、权限字符、字典 | 直接改页面 |
| 改代码 | 保持 api 分层、权限指令、loading/finally | 页面里硬编码请求地址 |
| 查风险 | 检查按钮权限、二次确认、错误提示 | 只看前端不看后端 |
| 验证 | 给出手工验证和必要测试建议 | 只说“已完成” |
</div>
<!--
前端改动也要有流程。
特别是若依这类后台项目,页面按钮、api 模块、权限字符、字典和后端接口是连在一起的。
不能只盯着 Vue 页面改。
-->
---
# 用户管理页面规则示例 # 用户管理页面规则示例
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
@@ -39,3 +60,47 @@ api 目录调用 · 权限指令 · 动态路由 · 列表 loading · 表单校
修改用户后列表必须刷新。 修改用户后列表必须刷新。
密码、手机号、邮箱等敏感字段不得随意明文展示或输出日志。 密码、手机号、邮箱等敏感字段不得随意明文展示或输出日志。
--> -->
---
# 按钮权限审查表
<div class="mt-5 text-sm">
| 按钮 | 前端权限字符 | 前端位置 | 后端接口 | 后端权限 | 日志 |
|---|---|---|---|---|---|
| 新增 | system:user:add | 页面按钮/指令 | POST /system/user | 待核对 | 待核对 |
| 修改 | system:user:edit | 页面按钮/指令 | PUT /system/user | 待核对 | 待核对 |
| 删除 | system:user:remove | 页面按钮/指令 | DELETE /system/user/{ids} | 待核对 | 待核对 |
| 导出 | system:user:export | 页面按钮/指令 | POST /system/user/export | 待核对 | 待核对 |
</div>
<!--
这张表是前端专项规则的核心输出。
学员可以让 TRAE 先填表,填不出来的地方就写待核对。
只有前端权限字符是不够的,还要继续核对后端接口权限和日志。
-->
---
# 前端 rules 片段
<div class="mt-4 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
```md
## 若依前端规则
- 新增页面按钮时,必须复用项目已有权限指令或权限判断方法。
- 新增接口调用时,必须放在对应 api 文件中,页面只调用封装方法。
- 删除、重置密码、导出等敏感按钮必须有二次确认、loading 恢复和错误提示。
- 涉及字典字段展示时,必须优先使用项目已有字典组件或字典工具。
- 前端权限只控制交互显示,不能作为接口安全结论。
```
</div>
<!--
这段前端 rules 可以直接进入最终 rules.md。
它把页面开发中的常见隐性要求写清楚:权限指令、api 分层、二次确认、loading、字典和安全边界。
-->
+75
View File
@@ -14,6 +14,31 @@
--- ---
# 资产入库标准
<div class="mt-5 text-sm">
| 标准 | 说明 |
|---|---|
| 可复用 | 不是一次性聊天记录,而是下个项目能直接改名使用 |
| 可验证 | 包含输出格式、验收标准和不确定点处理 |
| 可追溯 | 标注来源项目、适用版本、作者和更新时间 |
| 可演进 | 有版本号,允许从 v0.1 逐步迭代到团队规范 |
</div>
<div class="mt-4 p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
不要把所有好回答都叫资产;能被团队重复使用、能被检查,才叫资产。
</div>
<!--
资产化不是把聊天记录复制到文档里。
真正的资产要可复用、可验证、可追溯、可演进。
今天产出的 rules.md v0.1 就是第一版团队资产。
-->
---
# 若依资产库目录 # 若依资产库目录
<div class="mt-4 text-sm"> <div class="mt-4 text-sm">
@@ -37,3 +62,53 @@ templates 存若依代码理解报告、权限链路报告模板。
checklists 存权限检查、日志检查、代码生成检查清单。 checklists 存权限检查、日志检查、代码生成检查清单。
examples 存优秀案例和反面案例。 examples 存优秀案例和反面案例。
--> -->
---
# 推荐资产文件
<div class="mt-5 text-sm">
| 文件 | 用途 |
|---|---|
| prompts/若依/用户权限链路分析.md | 分析按钮、接口、权限字符、后端注解 |
| prompts/若依/证据收集优先.md | 防止 AI 直接下结论 |
| rules/若依/rules.v0.1.md | 团队 TRAE 协作规则 |
| templates/权限审查报告.md | 固定报告结构 |
| checklists/代码生成Review.md | 生成 CRUD 上线前检查 |
| examples/好规则与坏规则对照.md | 训练新成员写规则 |
</div>
<!--
这里把资产库拆成具体文件。
讲师可以要求每组课后至少提交三个文件:一个 Prompt、一个 rules、一个检查清单。
随着项目推进,再把优秀版本合并成团队公共资产。
-->
---
# 资产版本管理
<div class="grid grid-cols-2 gap-4 mt-6 text-sm">
<div class="p-4 rounded-xl bg-blue-500/10 border border-blue-500/30">
<div class="font-bold mb-2">命名建议</div>
- rules.v0.1.md
- 权限审查报告.template.md
- 用户权限链路分析.prompt.md
</div>
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
<div class="font-bold mb-2">更新记录</div>
- 适用项目/版本
- 新增规则
- 删除规则
- 触发案例
</div>
</div>
<!--
资产库后续会不断变化,所以要有版本管理。
每次 rules 更新,都要说明为什么更新,是因为新案例、新风险,还是团队约定变化。
-->
+73
View File
@@ -22,6 +22,35 @@
--- ---
# 规则可执行性四问
<div class="grid grid-cols-2 gap-4 mt-6 text-sm">
<div class="p-4 rounded-xl bg-blue-500/10 border border-blue-500/30">
<div class="font-bold mb-1">什么时候触发?</div>
<div class="text-xs text-gray-400">文件、功能、接口、操作类型</div>
</div>
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
<div class="font-bold mb-1">必须做什么?</div>
<div class="text-xs text-gray-400">检查、修改、输出、标注</div>
</div>
<div class="p-4 rounded-xl bg-amber-500/10 border border-amber-500/30">
<div class="font-bold mb-1">不能做什么?</div>
<div class="text-xs text-gray-400">禁止猜测、绕过、硬编码、直接上线</div>
</div>
<div class="p-4 rounded-xl bg-purple-500/10 border border-purple-500/30">
<div class="font-bold mb-1">怎么验收?</div>
<div class="text-xs text-gray-400">证据、测试、报告、人工确认</div>
</div>
</div>
<!--
判断 rules 是否可执行,就问这四个问题。
如果回答不出来,这条规则就是口号。
让学员用四问去改写坏规则,会比直接给标准答案更有效。
-->
---
# 若依好规则示例 # 若依好规则示例
<div class="mt-6 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm"> <div class="mt-6 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
@@ -41,6 +70,26 @@
--- ---
# 好规则拆解
<div class="mt-5 text-sm">
| 原文片段 | 它解决了什么 |
|---|---|
| 涉及用户、角色、菜单、部门、岗位 | 明确触发范围 |
| 新增、修改、删除、导出接口 | 明确敏感动作 |
| 必须检查后端权限控制和操作日志 | 明确 AI 必须动作 |
| 上线前检查权限、日志、校验、异常和测试 | 明确验收项 |
</div>
<!--
这页用来拆解为什么好规则好。
它不是句子更长,而是触发范围、敏感动作、必须动作和验收项都更明确。
-->
---
# 若依 rules 检查 Prompt # 若依 rules 检查 Prompt
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm"> <div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
@@ -61,6 +110,30 @@
--- ---
# rules 审查报告模板
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
```md
| 规则编号 | 当前规则 | 问题 | 改写建议 | 验收方式 |
|---|---|---|---|---|
| R-001 | 注意权限安全 | 太泛,无法触发 | 涉及敏感接口时必须检查... | 标注 Controller 权限注解 |
```
</div>
<div class="mt-4 text-sm">
要求 TRAE 输出审查报告后,再由人决定是否写入 <code>.trae/rules.md</code>。
</div>
<!--
rules 审查也要结构化。
不要让 AI 直接把 rules 改掉,要先列当前规则、问题、改写建议和验收方式。
讲师可以用这个模板让每组互评 rules。
-->
---
# 若依版 rules.md 结构 # 若依版 rules.md 结构
<div class="mt-6 text-sm"> <div class="mt-6 text-sm">
@@ -54,7 +54,7 @@
比如 AI 可能在页面里直接新增接口调用,可能只做前端按钮隐藏,可能没有检查后端权限注解,可能新增敏感操作但没有操作日志,可能用代码生成器生成 CRUD 后直接上线。 比如 AI 可能在页面里直接新增接口调用,可能只做前端按钮隐藏,可能没有检查后端权限注解,可能新增敏感操作但没有操作日志,可能用代码生成器生成 CRUD 后直接上线。
所以今天我们要把这些隐性开发要求写成中文规则,让 TRAE 在后续协作中长期遵守。 所以今天我们要把这些隐性开发要求写成规则,让 TRAE 在后续协作中长期遵守。
--- ---
@@ -555,7 +555,7 @@ IDE 配置
--- ---
# 模块 5:\.trae/rules\.md 中文安全规则 # 模块 5:\.trae/rules\.md 安全规则
--- ---
@@ -586,7 +586,7 @@ Token
--- ---
## Slide 5\-2:中文安全规则示例 ## Slide 5\-2:安全规则示例
### PPT 页面内容 ### PPT 页面内容
@@ -640,7 +640,7 @@ Token
--- ---
# 模块 6:中文编码与测试规则 # 模块 6:编码与测试规则
--- ---
@@ -714,7 +714,7 @@ Token
--- ---
# 模块 7:中文前端专项规则 # 模块 7:前端专项规则
--- ---
@@ -1012,7 +1012,7 @@ examples 存优秀案例和反面案例。
02_上下文引用模板 02_上下文引用模板
03_幻觉控制 Prompt 03_幻觉控制 Prompt
04_gitignore 忽略配置样例 04_gitignore 忽略配置样例
05_若依中文安全规则 05_若依安全规则
06_若依编码测试规则 06_若依编码测试规则
07_若依前端规则 07_若依前端规则
08_若依 AI 资产库目录 08_若依 AI 资产库目录