gz-oarms/progress.md

102 lines
4.5 KiB
Markdown
Raw Normal View History

# OARMS 权限体系设计 — 进度日志
## 当前状态
**阶段**: 第一轮完成Phase 1-3 + Phase 7 编译验证)
**进度**: Phase 1/2/3/7 已完成
---
## 阶段进度
| 阶段 | 状态 | 备注 |
|------|------|------|
| Phase 1: DDL 设计 | ✅ 完成 | 5 张表 + 初始数据 |
| Phase 2: Entity/Mapper | ✅ 完成 | system 模块 5 Entity + 5 Mapper + 2 Service |
| Phase 3: 认证流程 | ✅ 完成 | LoginController + StpInterfaceImpl + UserBaseServiceImpl |
| Phase 4: 鉴权+数据权限 | ✅ 完成 | 9 Controller 28 个方法添加 @SaCheckPermission |
| Phase 5: 前端角色路由 | ✅ 完成 | routes.js + permission.js + user.js + v-permission |
| Phase 6: 用户管理接口 | pending | 可选 |
| Phase 7: 编译验证 | ✅ 完成 | BUILD SUCCESS |
---
## 会话记录
### 2026-05-24 — 权限体系规划
**操作**:
1. 检查现有登录/用户模块实现 → 发现全部 TODO 未实现
2. 确认 PRD 中有角色定义 → 第三章 3 个角色 + 操作权限 + 数据权限
3. 研究后端代码 → Sa-Token 已集成StpInterfaceImpl/LoginController/UserBaseServiceImpl 均未实现
4. 研究前端代码 → 角色/路由框架存在,但仅 admin/guest
5. 研究框架 UserBase → 字段有限username, permission需扩展
**结论**:
- 现有代码是认证骨架,核心逻辑全部 TODO
- PRD 定义了 3 角色 × 操作权限 + 数据权限的完整 RBAC 模型
- 需从 DDL → Entity/Mapper → Service → Controller → 前端全链路实现
**设计决策**:
- 5 张新表SYS_USER, SYS_ROLE, SYS_USER_ROLE, SYS_PERMISSION, SYS_ROLE_PERMISSION
- 新模块路径modules/system/
- 权限码格式:`module:action`(如 screen:create
- 数据权限Service 层按角色动态追加查询条件
- Session 存储LoginUserVO 替代 UserBase
### 2026-05-24 — 第一轮执行Phase 1-3 + 7
**创建的文件**:
| 文件 | 说明 |
|------|------|
| `docs/db/sql/V11.0.0__SYS_system_ddl.sql` | 5 张表 DDL |
| `docs/db/sql/V11.0.0__SYS_system_init_data.sql` | 3 角色 + 27 权限 + 3 用户 |
| `modules/system/entity/SysUserEntity.java` | 用户实体 |
| `modules/system/entity/SysRoleEntity.java` | 角色实体 |
| `modules/system/entity/SysUserRoleEntity.java` | 用户角色关联实体 |
| `modules/system/entity/SysPermissionEntity.java` | 权限实体 |
| `modules/system/entity/SysRolePermissionEntity.java` | 角色权限关联实体 |
| `modules/system/entity/vo/LoginUserVO.java` | 登录用户信息 VO |
| `modules/system/entity/vo/SysUserVO.java` | 用户管理 VO |
| `modules/system/entity/query/SysUserQuery.java` | 用户查询条件 |
| `modules/system/mapper/SysUserMapper.java` | 用户 Mapper |
| `modules/system/mapper/SysRoleMapper.java` | 角色 Mapper含自定义 SQL |
| `modules/system/mapper/SysUserRoleMapper.java` | 用户角色关联 Mapper |
| `modules/system/mapper/SysPermissionMapper.java` | 权限 Mapper含自定义 SQL |
| `modules/system/mapper/SysRolePermissionMapper.java` | 角色权限关联 Mapper |
| `modules/system/service/ISysUserService.java` | 用户 Service 接口 |
| `modules/system/service/ISysRoleService.java` | 角色 Service 接口 |
| `modules/system/service/impl/SysUserServiceImpl.java` | 用户 Service 实现 |
| `modules/system/service/impl/SysRoleServiceImpl.java` | 角色 Service 实现 |
| `config/PasswordConfig.java` | BCrypt 密码加密 Bean |
**修改的文件**:
| 文件 | 变更 |
|------|------|
| `controller/LoginController.java` | 数据库认证替代硬编码,返回 LoginUserVO |
| `service/impl/StpInterfaceImpl.java` | 对接 SysRoleMapper/SysPermissionMapper |
| `service/impl/UserBaseServiceImpl.java` | 从 LoginUserVO 转换 UserBase |
| `pom.xml` | 添加 spring-security-crypto 依赖 |
**编译错误与修复**:
| 错误 | 修复 |
|------|------|
| `lambdaQuery()` 不存在 | ISysUserService 不继承 IService改用 SysUserMapper 直接查询 |
| `RestResult.fail()` 不存在 | 框架只有 `RestResult.ok()`,改用 `AssertUtils.isTrue()` |
| `AssertUtils.isTrue(boolean, String)` 签名不匹配 | 改为三参数 `isTrue(boolean, ResultCode, String)` |
**编译结果**: BUILD SUCCESS
---
## 遇到的错误
| 错误 | 尝试次数 | 解决方案 |
|------|---------|---------|
| lambdaQuery() 在 ISysUserService 上不存在 | 1 | 改用 SysUserMapper.selectOne() |
| RestResult.fail() 方法不存在 | 1 | 用 AssertUtils.isTrue() 替代 |
| AssertUtils.isTrue(boolean, String) 签名不匹配 | 1 | 改为 isTrue(boolean, ResultCode, String) |