imeeting/backend/design/project_design.md

109 lines
2.9 KiB
Markdown
Raw Normal View History

# 项目设计文档imeetingNew
## 1. 项目概述
本项目为“智能会议语音识别与总结系统”的管理后台,提供用户、角色、权限、设备与任务等管理能力。
后端为 Java 服务,前端为后台管理 Web。 后续所有内容变更都必须同步更新该文档
## 2. 技术栈
### 后端
- Java 17
- Spring Boot 3.x
- Spring MVC
- Spring Security + JWT
- ORM: MyBatis / MyBatis-Plus
- Database: PostgreSQL
- Cache: Redis
- Build: Maven
### 前端
- React 18
- TypeScript
- Ant Design
- React Router
- Axios
- Vite
## 3. 系统架构
### 后端分层
- Controller接收请求、参数校验、返回响应
- Service业务编排与事务边界
- Mapper数据访问
- DTO/VO对外数据结构
### 前端分层
```
src
├─ api # 后端接口封装
├─ components # 通用组件
├─ layouts # 布局
├─ pages # 页面
├─ routes # 路由
├─ hooks # 自定义 hooks
├─ utils # 工具
└─ types # 类型定义
```
## 4. 数据库设计(核心)
详见 `design/db_schema.md``design/db_schema_pgsql.sql`
核心表:
- sys_user / sys_role / sys_user_role
- sys_permission / sys_role_permission
- sys_dict_type / sys_dict_item
- sys_param
- sys_log
## 5. 权限设计
### 权限模型
- 角色与权限多对多
- 用户与角色多对多
- 权限分为 menu / button
- 支持层级菜单1级/2级
### 超级管理员
- 约定 `user_id = 1` 为超级管理员
- 后端权限查询对其返回全量权限
### 接口
- `GET /api/permissions`:仅管理员可用(全量)
- `GET /api/permissions/me`:当前用户权限
- `GET /api/permissions/tree`:管理员权限树
- `GET /api/permissions/tree/me`:当前用户权限树
### 创建/更新校验
- level=1 时清空 parentId
- level=2 时 parentId 必须存在且为 level=1
- button 权限必须填写 code
- menu 权限 code 可选
## 6. 前端权限处理
- 登录后调用 `/api/users/me` 获取 `isAdmin`
- `isAdmin=true` 时前端不做权限限制
- 非管理员通过 `/api/permissions/me` 获取权限码用于按钮控制
- 菜单展示按权限树构建
## 7. 关键流程
### 登录
1. `/auth/captcha`
2. `/auth/login`
3. `/api/users/me`(获取用户信息与 isAdmin
### 验证码开关(系统参数)
- 系统参数 `security.captcha.enabled` 控制验证码是否启用true/false
- 系统启动时加载 `sys_param` 到 Redis Hash`sys:param:{paramKey}`字段value/type
- 前端登录页根据系统参数决定是否展示验证码
### 权限菜单渲染
1. `/api/permissions/me` 获取权限列表
2. 前端构建树形菜单
## 8. 约束与规范
- 后端禁用 JPA/Hibernate
- 统一响应 `ApiResponse<T>`
- Controller 不直接调用 Mapper
- 前端禁止在页面内直接调用 axios
## 9. 后续扩展建议
- 添加审计日志落库策略
- 任务管理模块完善
- 权限树缓存与增量刷新策略