init
This commit is contained in:
@@ -0,0 +1,243 @@
|
||||
# 为什么选若依作为案例?
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
**若依适合训练:** 陌生代码库理解 · 前后端分离结构 · 登录认证链路 · 动态菜单与路由 · 角色与权限 · 按钮权限 · 数据权限 · 操作日志 · 代码生成
|
||||
|
||||
- 足够**真实** — 不是 demo,是完整后台管理系统
|
||||
- 足够**典型** — 很多企业内部系统都有这些模块
|
||||
- 足够**复杂** — 前后端分离、多模块、多层级
|
||||
</div>
|
||||
|
||||
<!--
|
||||
我们为什么选若依?
|
||||
|
||||
第一,若依足够真实。它不是 demo,而是一个完整后台管理系统。
|
||||
第二,它足够典型。很多企业内部系统都有用户、角色、菜单、权限、日志、字典、代码生成这些模块。
|
||||
第三,它非常适合讲 AI 辅助代码理解。因为若依既有前端也有后端、既有页面也有接口、既有权限也有日志、既有业务模块也有基础框架能力。
|
||||
|
||||
今天大家不是要记住若依所有代码,而是要学会一种方法:拿到一个陌生系统,如何让 TRAE 帮我们从结构、模块、链路和证据四个层面快速建立理解。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# AI 编程不只是写代码
|
||||
|
||||
<div class="mt-6">
|
||||
|
||||
更重要的是:**读代码 · 找入口 · 追链路 · 查风险 · 写测试 · 生成文档 · 沉淀经验**
|
||||
|
||||
<div class="mt-6 p-4 rounded-xl bg-white/5 border border-white/10 text-sm">
|
||||
AI 对研发的价值,不只是让某个人写得快一点,而是让团队更快理解系统、更快交接、更快定位风险。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
AI 编程早期给大家的印象,可能是补全代码、生成函数、写几个工具方法。
|
||||
|
||||
但在企业研发中,真正耗时的往往不是写几行代码,而是理解历史代码、追踪业务链路、判断影响范围、确认权限边界、补充测试和沉淀文档。
|
||||
|
||||
AI 对研发的价值,不只是让某个人写得快一点,而是让团队更快理解系统、更快交接、更快定位风险。今天的重点不是"AI 会不会写",而是"AI 能不能帮我们更快读懂一个真实项目"。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# AI 能效理念
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 mt-6">
|
||||
<div class="p-4 rounded-xl bg-red-500/10 border border-red-500/30">
|
||||
|
||||
**不是只看:** 代码写得更快
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
|
||||
|
||||
**更要看:**
|
||||
- 理解更快 · 交接更快
|
||||
- 定位更快 · 风险更早暴露
|
||||
- 团队知识沉淀更快
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这里讲一个关键词:能效。在企业里,研发能效不是单点速度,而是整个研发链条的效率。
|
||||
|
||||
如果新人接手若依这样的后台系统,以前可能要花很多时间搞清楚登录在哪里、权限从哪里来、菜单怎么生成、按钮怎么控制、后端接口如何校验。
|
||||
|
||||
如果 TRAE 能帮我们快速定位这些文件和调用关系,它带来的价值就不是少写几行代码,而是降低理解成本、交接成本和维护成本。这就是我们第一天从陌生代码库理解开始的原因。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# AI 替代人的现实判断
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 mt-6">
|
||||
<div>
|
||||
|
||||
**AI 会替代:** 重复性、低上下文、低判断含量的工作方式
|
||||
</div>
|
||||
<div>
|
||||
|
||||
**人必须负责:** 业务规则 · 权限边界 · 安全责任 · 架构取舍 · 上线决策
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
今天有管理层也有工程师,所以可以坦诚谈一下 AI 替代人的问题。
|
||||
|
||||
AI 会替代一部分重复性、低上下文、低判断含量的工作方式,但不能替代所有工程判断。比如若依里一个按钮是否应该对某个角色开放,这不是 AI 单独决定的。AI 可以帮我们找出权限字符在哪里配置、前端如何判断、后端如何校验,但业务上谁应该拥有这个权限,必须由人判断。
|
||||
|
||||
未来真正的差距,不是用不用 AI,而是能不能把 AI 放进标准研发流程,让它帮助我们找证据、提效率,而不是让它替我们承担责任。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 第一天真正要学什么?
|
||||
|
||||
<div class="grid grid-cols-4 gap-4 mt-8">
|
||||
<div class="text-center p-4 rounded-xl bg-blue-500/10 border border-blue-500/30">
|
||||
<div class="text-2xl mb-2">🏗️</div>
|
||||
<div class="font-bold">看结构</div>
|
||||
</div>
|
||||
<div class="text-center p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
|
||||
<div class="text-2xl mb-2">🔍</div>
|
||||
<div class="font-bold">找入口</div>
|
||||
</div>
|
||||
<div class="text-center p-4 rounded-xl bg-amber-500/10 border border-amber-500/30">
|
||||
<div class="text-2xl mb-2">🔗</div>
|
||||
<div class="font-bold">追链路</div>
|
||||
</div>
|
||||
<div class="text-center p-4 rounded-xl bg-red-500/10 border border-red-500/30">
|
||||
<div class="text-2xl mb-2">✅</div>
|
||||
<div class="font-bold">查依据</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-6 text-center text-sm text-gray-400">最终产出:若依权限与菜单模块代码理解报告</div>
|
||||
|
||||
<!--
|
||||
今天不是学几个 Prompt,今天训练四个动作。
|
||||
|
||||
第一,看结构。看若依前后端目录、模块分层、启动方式、技术栈。
|
||||
第二,找入口。找登录入口、用户信息接口、菜单接口、权限判断入口。
|
||||
第三,追链路。从登录开始,一路追到动态路由和按钮权限。
|
||||
第四,查依据。AI 的每个关键结论,都要能回到文件、函数、接口或调用关系中验证。
|
||||
|
||||
今天最后的产出,是一份"若依权限与菜单模块代码理解报告"。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 模块 1:TRAE 的定位
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 mt-6">
|
||||
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
|
||||
|
||||
**适合:** 检索代码 · 解释函数 · 梳理结构 · 生成链路初稿 · 生成文档初稿
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-red-500/10 border border-red-500/30">
|
||||
|
||||
**不能直接替代:** 业务判断 · 权限决策 · 安全判断 · 上线决策
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
我们先给 TRAE 定位。TRAE 不是替代工程师的工具,而是研发辅助工具。
|
||||
|
||||
在若依项目里,TRAE 很适合帮我们找登录接口、找用户信息接口、找菜单加载逻辑、找权限判断指令、解释后端 Controller 和 Service 的职责。
|
||||
|
||||
但它不能替我们决定某个角色应该拥有什么权限,也不能替我们判断某个接口是否可以上线。AI 可以帮我们找到代码事实,但不能替代业务和安全责任。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 代码事实 vs 业务事实
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 mt-8">
|
||||
<div class="p-4 rounded-xl bg-blue-500/10 border border-blue-500/30">
|
||||
|
||||
**代码事实:** 代码现在怎么写
|
||||
|
||||
TRAE 擅长发现代码事实
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-amber-500/10 border border-amber-500/30">
|
||||
|
||||
**业务事实:** 业务应该怎么规定
|
||||
|
||||
人工必须判断业务事实
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
在若依案例里,这个区分非常重要。
|
||||
|
||||
比如 TRAE 可能发现某个按钮使用了权限字符 system:user:edit,这是代码事实。但哪些角色应该拥有 system:user:edit,这是业务事实。
|
||||
|
||||
再比如,后端某个接口加了权限注解,这是代码事实。但这个接口权限设计是否合理、是否符合公司安全要求,这是业务事实。
|
||||
|
||||
所以我们用 TRAE 时,要明确它帮我们发现的是"当前系统怎么写",不是"业务上一定应该这样"。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 适合 TRAE 辅助的任务
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
- 理解前后端目录
|
||||
- 查找登录入口
|
||||
- 查找菜单接口
|
||||
- 分析动态路由生成
|
||||
- 解释按钮权限
|
||||
- 梳理角色权限关系
|
||||
- 生成代码理解报告初稿
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依项目里,有很多任务适合 TRAE 辅助。比如理解前后端目录结构、查找登录入口、查找获取用户信息和路由菜单的接口、分析前端动态路由生成逻辑、解释按钮权限如何生效、梳理角色、菜单、权限字符之间的关系。
|
||||
|
||||
这些信息主要都在代码库里,可以通过文件、函数、接口验证。所以我们可以让 TRAE 先生成初稿,再人工校对。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 必须人工判断的任务
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
- 角色权限是否合理
|
||||
- 数据权限范围是否正确
|
||||
- 接口是否应该开放
|
||||
- 敏感操作是否必须审计
|
||||
- 代码生成结果能否上线
|
||||
- 权限变更是否影响生产
|
||||
</div>
|
||||
|
||||
<!--
|
||||
有些任务不能直接交给 TRAE 决定。
|
||||
|
||||
比如某个角色是否应该拥有用户删除权限,某个部门的数据权限范围是否正确,某个接口是否应该开放,修改角色权限是否会影响生产用户。
|
||||
|
||||
这些涉及业务规则、安全边界和上线风险,必须人工判断。TRAE 可以帮助我们列出当前权限链路和风险点,但不能直接给最终决策。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 产出:TRAE 使用边界清单
|
||||
|
||||
<div class="mt-6">
|
||||
|
||||
| 分类 | 说明 |
|
||||
|------|------|
|
||||
| 适合 TRAE 辅助 | 查找登录接口、分析调用链路 |
|
||||
| 可生成初稿但必须人工复核 | 判断角色权限是否合理 |
|
||||
| 不建议直接交给 TRAE 决定 | 判断能否上线 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
第一个实操是生成 TRAE 使用边界清单。
|
||||
|
||||
请大家围绕若依项目,列出哪些任务适合 TRAE 辅助,哪些可以让 TRAE 生成初稿但必须人工复核,哪些不建议直接交给 TRAE 决定。
|
||||
|
||||
例如"查找登录接口"适合 TRAE 辅助;"判断角色权限是否合理"可以生成初稿但必须人工复核;"判断能否上线"不建议交给 TRAE 决定。
|
||||
-->
|
||||
@@ -0,0 +1,152 @@
|
||||
# 模块 2:若依核心业务对象
|
||||
|
||||
<div class="mt-4 text-sm">
|
||||
|
||||
```mermaid {scale: 0.8}
|
||||
graph LR
|
||||
U[User 用户] -->|绑定| R[Role 角色]
|
||||
R -->|授权| M[Menu 菜单]
|
||||
M -->|包含| P[Permission 权限字符]
|
||||
P -->|控制| A[页面/按钮/接口]
|
||||
U -->|属于| D[Dept 部门]
|
||||
```
|
||||
|
||||
核心对象:User 用户 · Role 角色 · Menu 菜单 · Permission 权限字符 · Dept 部门 · Post 岗位 · OperLog 操作日志 · Dict 字典 · GenTable 代码生成
|
||||
</div>
|
||||
|
||||
<!--
|
||||
理解若依,不能只看目录,要先看核心对象。
|
||||
|
||||
若依最核心的是用户、角色、菜单和权限。用户属于部门,可以拥有岗位,可以绑定角色。角色拥有菜单权限和数据权限。菜单不仅控制左侧菜单和动态路由,也关联按钮权限字符。操作日志记录关键操作。代码生成模块帮助生成 CRUD 代码。
|
||||
|
||||
今天我们重点看用户、角色、菜单、权限这条主线。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 若依模块总览
|
||||
|
||||
<div class="mt-6 grid grid-cols-2 gap-4 text-sm">
|
||||
<div>
|
||||
|
||||
- 登录认证
|
||||
- 用户管理
|
||||
- 角色管理
|
||||
- 菜单管理
|
||||
- 部门管理
|
||||
</div>
|
||||
<div>
|
||||
|
||||
- 岗位管理
|
||||
- 权限控制
|
||||
- 操作日志
|
||||
- 登录日志
|
||||
- 代码生成
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依常见模块包括登录认证、用户管理、角色管理、菜单管理、部门管理、岗位管理、权限控制、操作日志、登录日志、代码生成。
|
||||
|
||||
这些模块组合起来,构成一个典型企业后台系统。
|
||||
|
||||
今天不是要讲完所有模块,而是通过权限和菜单这条主线,学习如何理解陌生项目。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 用户、角色、菜单、权限关系
|
||||
|
||||
<div class="mt-6 text-center text-sm">
|
||||
|
||||
用户 User → 绑定 → 角色 Role → 授权 → 菜单 Menu → 包含 → 权限字符 Permission → 控制 → 页面访问 / 按钮显示 / 接口访问
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依权限体系可以先用这张图理解。
|
||||
|
||||
用户绑定角色。角色被授予菜单。菜单可以是目录、菜单页面,也可以是按钮权限。按钮权限通常通过权限字符表示,比如用户新增、用户修改、用户删除。
|
||||
|
||||
前端根据这些权限字符控制按钮显示,后端接口也应基于权限注解或权限判断控制访问。今天我们要追踪的就是这条链路从后端到前端如何生效。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 若依中的三类权限
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 mt-8">
|
||||
<div class="p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
|
||||
|
||||
**页面权限**
|
||||
|
||||
能不能看到某个菜单页面
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm">
|
||||
|
||||
**按钮权限**
|
||||
|
||||
能不能看到新增、修改、删除按钮
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
|
||||
|
||||
**数据权限**
|
||||
|
||||
能看到哪些部门或范围的数据
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依里我们可以把权限分成三类。
|
||||
|
||||
第一,页面权限。用户能不能看到某个菜单页面。
|
||||
第二,按钮权限。比如用户管理页面上的新增、修改、删除、导出按钮是否显示。
|
||||
第三,数据权限。比如某个角色只能看本部门数据,还是可以看全部数据。
|
||||
|
||||
这三类权限不能混在一起。页面能看到不代表按钮能操作。按钮隐藏也不代表后端接口安全。数据能看到多少又是另外一套规则。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 若依业务导览 Prompt
|
||||
|
||||
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
|
||||
|
||||
```
|
||||
@workspace 请从业务视角分析若依项目。
|
||||
|
||||
重点说明:
|
||||
1. 系统主要解决什么问题
|
||||
2. 核心业务对象有哪些
|
||||
3. 用户、角色、菜单、权限如何协作
|
||||
4. 前端和后端分别负责什么
|
||||
5. 哪些结论需要人工验证
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这一页是若依业务导览 Prompt。注意我们不是让 TRAE 泛泛总结项目,而是指定业务视角。
|
||||
|
||||
我们让它说明系统解决什么问题、核心业务对象有哪些、用户、角色、菜单、权限如何协作、前端和后端分别负责什么。同时必须列出需要人工验证的内容。
|
||||
|
||||
这能帮助我们快速建立若依的模块认知图。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 产出:若依模块认知图
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
产出内容:核心业务对象 · 核心模块 · 模块职责 · 模块依赖关系 · 权限链路 · 风险点 · 不确定点
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这一部分的产出是若依模块认知图。
|
||||
|
||||
大家要整理出核心业务对象、核心模块、模块职责、模块依赖关系、权限链路、风险点和不确定点。
|
||||
|
||||
例如用户模块依赖部门、岗位和角色;角色模块关联菜单和数据权限;菜单模块既影响动态路由,也影响按钮权限;操作日志模块记录关键操作。
|
||||
-->
|
||||
@@ -0,0 +1,128 @@
|
||||
# 模块 3:不要让 AI 泛泛总结项目
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 mt-6 text-sm">
|
||||
<div class="p-4 rounded-xl bg-red-500/10 border border-red-500/30">
|
||||
|
||||
**不要问:**
|
||||
```
|
||||
@workspace 帮我看看若依项目
|
||||
```
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
|
||||
|
||||
**要问:** 从前端、后端、认证、路由、API、权限、日志、测试、构建分析项目,并标注依据文件
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
使用 @workspace 时,最常见的错误是问"帮我看看这个项目"。这样 AI 会给一段泛泛总结。
|
||||
|
||||
我们要让它从明确维度分析:前端结构、后端结构、认证流程、路由菜单、API 封装、权限控制、日志记录、测试结构、构建方式。并且要求每个结论标注依据文件。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 若依前后端结构怎么读?
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 mt-4 text-sm">
|
||||
<div>
|
||||
|
||||
**前端重点:** src/api · src/router · src/store · src/views · src/directive · src/permission · src/utils/request
|
||||
</div>
|
||||
<div>
|
||||
|
||||
**后端重点:** ruoyi-admin · ruoyi-framework · ruoyi-system · ruoyi-common · Controller · Service · Mapper
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依是前后端分离项目,所以读结构时要分前端和后端。
|
||||
|
||||
前端重点看 api、router、store、views、directive、permission 文件、request 封装。
|
||||
|
||||
后端重点看 ruoyi-admin、ruoyi-framework、ruoyi-system、ruoyi-common,以及 Controller、Service、Mapper 分层。
|
||||
|
||||
如果使用 RuoYi-Vue3,前端目录和状态管理方式可能不同,但分析方法一样。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 认证链路要看哪些文件?
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
登录页面 → login API → token 存储 → request 拦截器 → getInfo 用户信息 → getRouters 动态路由 → 权限 store → 路由守卫
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依权限主线从登录开始。
|
||||
|
||||
我们要看登录页面在哪里、login API 怎么调用、token 存在哪里、request 拦截器如何带 token、请求用户信息的 getInfo 在哪里、请求菜单路由的 getRouters 在哪里、权限 store 如何保存角色和权限、路由守卫如何判断是否已加载菜单。
|
||||
|
||||
这条链路是今天最重要的主线。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 动态菜单与路由怎么看?
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
- 后端菜单表
|
||||
- 菜单类型:目录 / 菜单 / 按钮
|
||||
- 路由地址 · 组件路径 · 权限字符
|
||||
- 前端动态路由转换
|
||||
- router.addRoute
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依的菜单不是单纯前端写死的。
|
||||
|
||||
后台菜单管理里配置菜单,菜单可以是目录、页面菜单,也可以是按钮权限。菜单包含路由地址、组件路径、权限字符等信息。
|
||||
|
||||
前端获取后端返回的菜单数据后,会转换成前端路由,再动态挂载。所以分析动态菜单,既要看后端菜单接口,也要看前端路由转换逻辑。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 全局结构分析 Prompt
|
||||
|
||||
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
|
||||
|
||||
```
|
||||
@workspace 请分析若依项目全局结构。
|
||||
维度:1.前端目录 2.后端目录 3.登录认证 4.动态路由
|
||||
5.API封装 6.权限控制 7.操作日志 8.代码生成
|
||||
9.测试与构建 10.不确定点
|
||||
每个结论标注依据文件。
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这是若依全局结构分析的标准 Prompt。大家注意,维度非常明确。
|
||||
|
||||
我们不是让 AI 自己决定讲什么,而是让它从前端目录、后端目录、登录认证、动态路由、API 封装、权限控制、操作日志、代码生成、测试与构建这些维度分析。
|
||||
|
||||
每个结论都要标注依据文件。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 产出:若依项目结构图
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
项目结构图应包含:前端目录职责 · 后端模块职责 · 认证与权限相关文件 · 菜单与路由相关文件 · API 封装相关文件 · 操作日志相关文件 · 不确定点
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这一部分最终产出是若依项目结构图。
|
||||
|
||||
结构图不只是列目录,而是说明每个目录和权限主线有什么关系。比如前端 views/system/user 是用户管理页面,api/system/user 是用户接口,store/modules/permission 或 permission 文件和动态路由有关,directive/permission 和按钮权限有关。
|
||||
|
||||
后端 sys 用户、角色、菜单 Controller、Service、Mapper 共同支撑权限管理。
|
||||
-->
|
||||
@@ -0,0 +1,217 @@
|
||||
# 模块 4:第一天核心链路
|
||||
|
||||
<div class="mt-4 text-center text-sm">
|
||||
|
||||
```mermaid {scale: 0.75}
|
||||
graph TD
|
||||
A[用户登录] --> B[获取 token]
|
||||
B --> C[获取用户信息]
|
||||
C --> D[获取菜单路由]
|
||||
D --> E[生成动态路由]
|
||||
E --> F[进入系统页面]
|
||||
F --> G[根据权限字符控制按钮]
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
下午我们进入第一天最重要的部分:调用链路分析。
|
||||
|
||||
若依案例的主线链路是:用户登录→获取 token→获取用户信息→获取菜单路由→生成动态路由→进入系统页面→根据权限字符控制按钮。
|
||||
|
||||
这条链路覆盖前端页面、API 调用、后端接口、用户角色、菜单权限、动态路由和按钮权限,非常适合训练陌生代码库理解。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 调用链路 8 个检查点
|
||||
|
||||
<div class="mt-6 grid grid-cols-4 gap-3 text-sm">
|
||||
<div class="p-2 rounded bg-blue-900/20 text-center">1. 页面入口</div>
|
||||
<div class="p-2 rounded bg-blue-900/20 text-center">2. UI 组件</div>
|
||||
<div class="p-2 rounded bg-blue-900/20 text-center">3. 事件函数</div>
|
||||
<div class="p-2 rounded bg-blue-900/20 text-center">4. API 调用</div>
|
||||
<div class="p-2 rounded bg-emerald-900/20 text-center">5. 后端 Controller</div>
|
||||
<div class="p-2 rounded bg-emerald-900/20 text-center">6. Service/权限</div>
|
||||
<div class="p-2 rounded bg-amber-900/20 text-center">7. 前端状态更新</div>
|
||||
<div class="p-2 rounded bg-amber-900/20 text-center">8. 路由/按钮生效</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依的调用链路可以拆成 8 个检查点。
|
||||
|
||||
页面入口,比如登录页或用户管理页。
|
||||
UI 组件,比如登录表单或新增按钮。
|
||||
事件函数,比如 handleLogin。
|
||||
API 调用,比如 login、getInfo、getRouters。
|
||||
后端 Controller,比如登录接口、菜单路由接口。
|
||||
Service 或权限逻辑,比如用户信息、角色权限、菜单树。
|
||||
前端状态更新,比如保存 token、roles、permissions、routes。
|
||||
最后是路由和按钮权限生效。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 登录认证链路示例
|
||||
|
||||
<div class="mt-4 text-sm">
|
||||
|
||||
用户输入账号密码 → Login 页面提交 → 调用 login API → 后端认证用户 → 返回 token → 前端保存 token → request 拦截器携带 token
|
||||
|
||||
**重点:** token 存在哪里?拦截器在哪里带 token?token 失效后如何处理?
|
||||
</div>
|
||||
|
||||
<!--
|
||||
登录认证链路是第一条主线。
|
||||
|
||||
用户在登录页面输入账号密码,提交表单,前端调用 login API。后端校验用户身份,成功后返回 token。前端保存 token,后续请求通过 request 拦截器携带 token。
|
||||
|
||||
这里要重点看三个问题:token 存在哪里,request 拦截器在哪里带 token,token 失效后如何处理。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 用户信息与权限加载链路
|
||||
|
||||
<div class="mt-4 text-sm">
|
||||
|
||||
登录成功 → 调用 getInfo → 后端返回 user/roles/permissions → 前端保存用户信息 → 前端保存角色和权限字符 → 后续用于按钮权限判断
|
||||
|
||||
**注意:** 前端拿到权限字符只能控制页面展示,不能作为后端安全边界
|
||||
</div>
|
||||
|
||||
<!--
|
||||
登录成功之后,系统通常会请求用户信息。
|
||||
|
||||
getInfo 这类接口会返回当前用户信息、角色列表、权限字符等。前端保存这些数据后,后续按钮权限就会依赖这些权限字符进行判断。
|
||||
|
||||
这里要注意:前端拿到权限字符只能控制页面展示,不能作为后端安全边界。真正的接口安全仍然需要后端权限校验。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 动态路由加载链路
|
||||
|
||||
<div class="mt-4 text-sm">
|
||||
|
||||
调用 getRouters → 后端返回菜单树 → 前端转换为路由对象 → 动态挂载路由 → 渲染侧边栏菜单 → 用户进入页面
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依的菜单和路由通常是动态加载的。
|
||||
|
||||
前端调用 getRouters,后端根据当前用户角色和菜单权限返回菜单树。前端把菜单树转换成路由对象,再动态挂载到 router 中。侧边栏根据这些路由渲染菜单。
|
||||
|
||||
这条链路很适合训练"从后端数据到前端页面"的完整理解。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 按钮权限链路
|
||||
|
||||
<div class="mt-4 text-sm">
|
||||
|
||||
菜单中配置权限字符 → 角色拥有该权限字符 → getInfo 返回 permissions → 前端权限指令/方法判断 → 控制按钮显示或隐藏
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
按钮权限的核心是权限字符。
|
||||
|
||||
在菜单管理中,按钮通常会配置类似"用户新增"、"用户修改"、"用户删除"这样的权限字符。角色被授权后,用户登录时会拿到对应权限字符。前端通过权限指令或权限判断方法,决定按钮是否显示。
|
||||
|
||||
再次强调:按钮隐藏只代表前端交互控制,不代表接口安全。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 后端接口权限链路
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 mt-6">
|
||||
<div class="p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
|
||||
|
||||
**前端按钮权限** → 只能控制 UI 展示
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
|
||||
|
||||
**后端接口权限** → 必须控制真实访问
|
||||
|
||||
需要确认:Controller 是否有权限注解?Service 是否校验数据权限?
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这一页是权限分析的关键。
|
||||
|
||||
前端按钮权限只能控制 UI 展示。如果用户绕过前端、直接请求后端接口,那么真正决定是否安全的是后端接口权限。
|
||||
|
||||
所以在若依里,我们要检查 Controller 是否有权限注解,Service 是否处理数据权限。如果 AI 只看到前端按钮权限,就说"权限安全",这是错误结论。
|
||||
|
||||
报告里必须区分前端权限和后端权限。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 操作日志链路
|
||||
|
||||
<div class="mt-4 text-sm">
|
||||
|
||||
管理员修改用户 → 调用后端接口 → Controller 执行业务 → 日志注解/AOP 记录操作 → 写入操作日志 → 操作日志页面查询
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依还有一个很适合训练的链路:操作日志。
|
||||
|
||||
比如管理员修改用户信息,前端调用后端接口,后端 Controller 执行业务逻辑。如果接口上配置了日志注解或 AOP,系统会记录操作人、操作模块、操作类型、请求参数、结果等信息。然后管理员可以在操作日志页面查看。
|
||||
|
||||
这条链路适合讲审计、日志脱敏和敏感操作追踪。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 调用链路分析 Prompt
|
||||
|
||||
<div class="mt-4 p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
|
||||
|
||||
```
|
||||
@workspace 请分析若依中"登录后菜单与按钮权限生效"的完整调用链路。
|
||||
从用户登录开始,依次说明:
|
||||
登录页面、登录API、token、getInfo、getRouters、
|
||||
动态路由、侧边栏菜单、按钮权限、后端接口权限、不确定点。
|
||||
每一步标注文件路径和函数名。
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这是若依调用链路分析 Prompt。
|
||||
|
||||
注意,这个 Prompt 不是让 AI 总结权限系统,而是让它从用户登录开始,按顺序追踪链路。必须包含登录页面、登录 API、token、getInfo、getRouters、动态路由、侧边栏菜单、按钮权限、后端接口权限和不确定点。
|
||||
|
||||
每一步都要标注文件路径和函数名。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 产出:若依权限调用链路图
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
- 登录认证链路图
|
||||
- 用户信息加载链路图
|
||||
- 动态菜单路由链路图
|
||||
- 按钮权限链路图
|
||||
- 后端接口权限链路图
|
||||
- 操作日志链路图
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这一部分的产出是若依权限调用链路图。
|
||||
|
||||
不是只画一条线,而是可以拆成几条子链路:登录认证、用户信息加载、动态菜单路由、按钮权限、后端接口权限、操作日志。
|
||||
|
||||
每条链路都要有依据文件和不确定点。
|
||||
-->
|
||||
@@ -0,0 +1,107 @@
|
||||
# 模块 5:常见 AI 幻觉
|
||||
|
||||
<div class="mt-6 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm">
|
||||
|
||||
**常见不可信结论:**
|
||||
- 若依权限系统很完善
|
||||
- 所有接口都有后端校验
|
||||
- 按钮权限已经保证安全
|
||||
- 操作日志一定完整
|
||||
- 代码生成结果可以直接上线
|
||||
</div>
|
||||
|
||||
<!--
|
||||
在若依这种项目里,AI 很容易给出看起来正确但不严谨的结论。
|
||||
比如“若依权限系统很完善”“所有接口都有后端校验”“按钮权限已经保证安全”“操作日志一定完整”“代码生成结果可以直接上线”。
|
||||
这些话都不能直接信。
|
||||
要追问:依据文件在哪里?哪个 Controller?哪个注解?哪个权限字符?哪个 AOP?哪个 Service?
|
||||
没有依据,就不能写成确定结论。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 可信输出四件套
|
||||
|
||||
<div class="grid grid-cols-4 gap-4 mt-8">
|
||||
<div class="text-center p-4 rounded-xl bg-white/5 border border-white/10">
|
||||
<div class="text-2xl mb-2">📁</div>
|
||||
<div class="font-bold text-sm">文件路径</div>
|
||||
</div>
|
||||
<div class="text-center p-4 rounded-xl bg-white/5 border border-white/10">
|
||||
<div class="text-2xl mb-2">⚙️</div>
|
||||
<div class="font-bold text-sm">函数/类/注解</div>
|
||||
</div>
|
||||
<div class="text-center p-4 rounded-xl bg-white/5 border border-white/10">
|
||||
<div class="text-2xl mb-2">🔗</div>
|
||||
<div class="font-bold text-sm">调用关系</div>
|
||||
</div>
|
||||
<div class="text-center p-4 rounded-xl bg-white/5 border border-white/10">
|
||||
<div class="text-2xl mb-2">❓</div>
|
||||
<div class="font-bold text-sm">不确定点</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依案例里,一条可信结论必须包含四件套。
|
||||
文件路径:前端哪个 api 文件、后端哪个 Controller。
|
||||
函数、类或注解:getInfo、getRouters、权限指令、Controller 方法、权限注解。
|
||||
调用关系:登录后先拿 token,再 getInfo,再 getRouters,再生成动态路由。
|
||||
不确定点:比如无法确认某个接口是否有数据权限校验。
|
||||
四件套不全的回答,不能轻易采纳。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 不可信回答示例
|
||||
|
||||
<div class="mt-6 p-4 rounded-xl bg-red-500/10 border border-red-500/30 text-sm italic">
|
||||
「若依已经实现了完整权限控制,用户登录后会自动加载菜单和按钮权限,后端接口也都有权限校验,整体风险较低。」
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-sm text-gray-400">问题:没有文件路径 · 没有函数名 · 没有调用关系 · 没有不确定点</div>
|
||||
|
||||
<!--
|
||||
这段话看起来很顺,但不合格。
|
||||
为什么?没有文件路径。没有函数名。没有说明菜单从哪个接口加载。没有说明按钮权限由哪个指令判断。没有说明后端接口权限在哪里校验。没有列出不确定点。
|
||||
这种回答不能进入报告。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 可信回答示例
|
||||
|
||||
<div class="mt-6 p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-sm italic">
|
||||
「前端登录成功后调用 getInfo 获取用户信息和权限字符。随后调用 getRouters 获取动态路由菜单。前端根据返回路由生成侧边栏菜单。可以确认前端存在菜单和按钮权限控制。但仍需检查后端 Controller 权限注解,才能确认接口级权限。」
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这个回答更可信。
|
||||
它说明了前端登录后的两个关键动作:getInfo 和 getRouters。
|
||||
它说明了前端根据返回路由生成菜单。
|
||||
同时它没有夸大结论:可以确认前端存在菜单和按钮权限控制,但仍需检查后端 Controller 权限注解,才能确认接口级权限。
|
||||
这就是专业表达。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 产出:TRAE 输出校验清单
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
| 检查项 | 要求 |
|
||||
|--------|------|
|
||||
| 文件路径 | 必须有 |
|
||||
| 函数/类/注解 | 必须有 |
|
||||
| 调用关系 | 必须说明 |
|
||||
| 前后端区分 | 必须区分 |
|
||||
| 不确定点 | 必须列出 |
|
||||
| 验证方式 | 必须给出 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这一部分的产出是 TRAE 输出校验清单。
|
||||
以后 AI 给出若依权限分析时,就按这些问题检查:
|
||||
是否有文件路径?是否有函数、类或注解?是否说明调用关系?是否区分前端权限和后端权限?是否列出不确定点?是否给出验证方式?
|
||||
没有通过这些检查的内容,不写进报告。
|
||||
-->
|
||||
@@ -0,0 +1,140 @@
|
||||
# 模块 6:报告主题
|
||||
|
||||
<div class="mt-8 text-center">
|
||||
|
||||
<div class="p-6 rounded-xl bg-blue-500/10 border border-blue-500/30 inline-block">
|
||||
|
||||
**代码理解报告:若依权限与菜单模块**
|
||||
|
||||
核心问题:用户登录后,菜单、路由和按钮权限如何生效?
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
今天最终实战,是生成一份代码理解报告。
|
||||
报告主题:若依权限与菜单模块。
|
||||
核心问题:用户登录后,菜单、路由和按钮权限如何生效?
|
||||
这份报告不是 AI 聊天记录,而是可交接、可复核的工程文档。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 报告结构
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
报告包含:模块职责 · 核心对象 · 目录与文件结构 · 核心调用链路 · 权限风险 · 操作日志风险 · 改造建议 · 不确定结论
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
报告至少包含八部分:模块职责、核心对象、目录与文件结构、核心调用链路、权限风险、操作日志风险、改造建议、不确定结论。
|
||||
每个关键结论都要有依据文件或函数。
|
||||
如果没有依据,就写到不确定点里。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 模块职责写法
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 mt-6 text-sm">
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30">
|
||||
|
||||
**不要写:** 权限模块用于权限控制。
|
||||
</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
|
||||
|
||||
**要写:** 权限与菜单模块负责用户登录后加载角色、权限字符和动态路由,并根据角色菜单关系控制页面访问和按钮显示。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
模块职责不能写空话。
|
||||
“权限模块用于权限控制”没有信息量。
|
||||
合格写法要具体说明:权限与菜单模块负责用户登录后加载角色、权限字符和动态路由,并根据角色菜单关系控制页面访问和按钮显示。
|
||||
同时要说明前端权限和后端权限的边界。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 核心对象写法
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
User 用户 · Role 角色 · Menu 菜单 · Permission 权限字符 · Dept 部门 · OperLog 操作日志
|
||||
|
||||
用户绑定角色,角色拥有菜单权限,菜单中包含权限字符,部门影响数据权限,操作日志记录敏感操作。
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
若依权限模块的核心对象是用户、角色、菜单、权限字符、部门和操作日志。
|
||||
用户绑定角色,角色拥有菜单权限,菜单中包含权限字符,部门影响数据权限,操作日志记录敏感操作。
|
||||
这些对象共同构成权限体系。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 风险点写法
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 mt-6 text-sm">
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30">
|
||||
|
||||
**不要写:** 权限有风险。
|
||||
</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
|
||||
|
||||
**要写:**
|
||||
- 风险:按钮权限只控制前端展示
|
||||
- 触发条件:后端接口缺少权限校验
|
||||
- 影响:用户可能绕过前端直接调用接口
|
||||
- 验证:检查 Controller 是否有权限注解
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
风险点一定要具体。
|
||||
“权限有风险”不是合格风险点。
|
||||
合格风险点要包含风险描述、触发条件、影响范围和验证方式。
|
||||
比如按钮权限只控制前端展示;触发条件是后端接口缺少权限校验;影响是用户可能绕过前端直接调用接口;验证方式是检查 Controller 是否有权限注解。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 改造建议写法
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
- **建议:** 确保敏感接口均有后端权限校验
|
||||
- **原因:** 前端按钮隐藏不能作为安全边界
|
||||
- **验收:** 无权限用户直接请求接口时返回 403
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
改造建议也要具体。
|
||||
比如建议确保用户、角色、菜单等敏感接口均有后端权限校验。
|
||||
原因是前端按钮隐藏不能作为安全边界。
|
||||
验收标准是无权限用户直接请求接口时返回 403。
|
||||
这样的建议才可以进入工程评审。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 第 1 天最终交付物
|
||||
|
||||
<div class="grid grid-cols-3 gap-3 mt-8 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">01 TRAE 使用边界清单</div>
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">02 若依模块认知图</div>
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">03 若依项目结构图</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-center">04 权限调用链路图</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-center">05 TRAE 输出校验清单</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-center">06 代码理解报告</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
第 1 天最终交付六个产物:
|
||||
TRAE 使用边界清单、若依模块认知图、若依项目结构图、权限调用链路图、TRAE 输出校验清单、若依权限与菜单模块代码理解报告。
|
||||
这些产物构成第一天的完整成果。
|
||||
-->
|
||||
Reference in New Issue
Block a user