feat(admin): Add user management and upgrade to module permission system

Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
This commit is contained in:
2026-01-16 13:42:10 +08:00
parent 98d862dbd4
commit 66255368b7
560 changed files with 70424 additions and 52353 deletions

View File

@@ -1,19 +1,19 @@
# Prisma多Schema配置完成报告
> **瀹屾垚鏃堕棿锛?* 2025-11-12
> **完成时间:** 2025-11-12
> **配置人:** AI助手
> **鐘舵€侊細** 鉁?鎴愬姛瀹屾垚
> **状态:** ✅ 成功完成
---
## 鉁?閰嶇疆姒傚喌
## ✅ 配置概况
### 瀹屾垚鐨勫伐浣?
### 完成的工作
1. 鉁?**娣诲姞schemas澹版槑** - 鍦╠atasource<EFBFBD>鏄?1涓猻chema
2. 鉁?**涓?3涓猰odels娣诲姞@@schema()鏍囩<EFBFBD>** - 鎸囧畾姣忎釜model鎵€灞炵殑schema
3. 鉁?**鐢熸垚鏂扮殑Prisma Client** - <EFBFBD>寔澶歋chema鐨勫<EFBFBD>鎴风<EFBFBD>
4. 鉁?**绉婚櫎deprecated鐗规€?* - 娓呯悊涓嶅啀闇€瑕佺殑previewFeatures
1. **添加schemas声明** - 在datasource中声明11个schema
2. **为13个models添加@@schema()标签** - 指定每个model所属的schema
3. **生成新的Prisma Client** - 支持多Schema的客户端
4. **移除deprecated特性** - 清理不再需要的previewFeatures
---
@@ -21,7 +21,7 @@
### 1. Datasource配置
**schemas澹版槑锛?1涓<31>級锛?*
**schemas声明11个**
```prisma
datasource db {
@@ -33,28 +33,28 @@ datasource db {
### 2. Models Schema分配
#### Platform Schema锛?涓猰odel锛?
- 鉁?`User` 鈫?`platform_schema`
#### Platform Schema1个model
- `User` `platform_schema`
#### AIA Schema锛?涓猰odels锛?
- 鉁?`Project` 鈫?`aia_schema`
- 鉁?`Conversation` 鈫?`aia_schema`
- 鉁?`Message` 鈫?`aia_schema`
- 鉁?`GeneralConversation` 鈫?`aia_schema`
- 鉁?`GeneralMessage` 鈫?`aia_schema`
#### AIA Schema5个models
- `Project` `aia_schema`
- `Conversation` `aia_schema`
- `Message` `aia_schema`
- `GeneralConversation` `aia_schema`
- `GeneralMessage` `aia_schema`
#### PKB Schema锛?涓猰odels锛?
- 鉁?`KnowledgeBase` 鈫?`pkb_schema`
- 鉁?`Document` 鈫?`pkb_schema`
- 鉁?`BatchTask` 鈫?`pkb_schema`
- 鉁?`BatchResult` 鈫?`pkb_schema`
- 鉁?`TaskTemplate` 鈫?`pkb_schema`
#### PKB Schema5个models
- `KnowledgeBase` `pkb_schema`
- `Document` `pkb_schema`
- `BatchTask` `pkb_schema`
- `BatchResult` `pkb_schema`
- `TaskTemplate` `pkb_schema`
#### Public Schema锛?涓猰odels - 淇濈暀鏈<EFBFBD>縼绉伙級
- 鉁?`AdminLog` 鈫?`public`
- 鉁?`ReviewTask` 鈫?`public`
#### Public Schema2个models - 保留未迁移)
- `AdminLog` `public`
- `ReviewTask` `public`
**鎬昏<EFBFBD>锛?* 13涓猰odels鍏ㄩ儴閰嶇疆瀹屾垚 鉁?
**总计:** 13个models全部配置完成 ✅
---
@@ -63,34 +63,34 @@ datasource db {
### Prisma Client生成
```bash
鉁?Generated Prisma Client (v6.17.0) to .\node_modules\@prisma\client in 149ms
Generated Prisma Client (v6.17.0) to .\node_modules\@prisma\client in 149ms
```
**状态:** 成功生成,无错误
### 配置验证
- 鉁?鎵€鏈塵odels閮芥湁@@schema()鏍囩<EFBFBD>
- 鉁?鎵€鏈塻chema閮藉湪datasource.schemas<EFBFBD>鏄?
- 鉁?璺⊿chema寮曠敤锛堝<EFBFBD><EFBFBD>級閰嶇疆姝
- 鉁?Prisma Client缂栬瘧閫氳繃
- ✅ 所有models都有@@schema()标签
- ✅ 所有schema都在datasource.schemas中声明
- ✅ 跨Schema引用(外键)配置正确
- Prisma Client编译通过
---
## 馃搳 Schema涓嶮odel瀵瑰簲琛?
## 📊 Schema与Model对应表
| Schema | Model数量 | Models列表 |
|--------|-----------|-----------|
| platform_schema | 1 | User |
| aia_schema | 5 | Project, Conversation, Message, GeneralConversation, GeneralMessage |
| pkb_schema | 5 | KnowledgeBase, Document, BatchTask, BatchResult, TaskTemplate |
| asl_schema | 0 | 锛堢┖Schema锛學eek 3璁捐<EFBFBD>锛?|
| common_schema | 0 | 锛堢┖Schema锛屾寜闇€璁捐<EFBFBD>锛?|
| dc_schema | 0 | 锛堢┖Schema锛屾寜闇€璁捐<EFBFBD>锛?|
| rvw_schema | 0 | 锛堢┖Schema锛屾寜闇€璁捐<EFBFBD>锛?|
| admin_schema | 0 | 锛堢┖Schema锛屾寜闇€璁捐<EFBFBD>锛?|
| ssa_schema | 0 | 锛堢┖Schema锛屾寜闇€璁捐<EFBFBD>锛?|
| st_schema | 0 | 锛堢┖Schema锛屾寜闇€璁捐<EFBFBD>锛?|
| asl_schema | 0 | (空SchemaWeek 3设计) |
| common_schema | 0 | (空Schema,按需设计) |
| dc_schema | 0 | (空Schema,按需设计) |
| rvw_schema | 0 | (空Schema,按需设计) |
| admin_schema | 0 | (空Schema,按需设计) |
| ssa_schema | 0 | (空Schema,按需设计) |
| st_schema | 0 | (空Schema,按需设计) |
| public | 2 | AdminLog, ReviewTask暂时保留 |
---
@@ -99,7 +99,7 @@ datasource db {
### 外键关系配置
鎵€鏈変笟鍔℃ā鍧楃殑models閮芥<EFBFBD><EFBFBD>紩鐢╜platform_schema.User`锛?
所有业务模块的models都正确引用`platform_schema.User`
```prisma
// 示例Project model
@@ -111,29 +111,29 @@ model Project {
}
```
**楠岃瘉锛?* 鉁?鎵€鏈夎法Schema澶栭敭姝閰嶇疆锛孭risma鏀<61>寔璺⊿chema寮曠敤
**验证:** ✅ 所有跨Schema外键正确配置Prisma支持跨Schema引用
---
## ⚠️ 重要说明
### 1. 褰撳墠鐘舵€?
- 鉁?鏁版嵁搴擄細10涓猄chema宸插垱寤猴紝鏁版嵁宸茶縼绉?
- 鉁?Prisma锛氶厤缃<E58EA4>凡鏇存柊锛孋lient宸茬敓鎴?
- 鉂?浠g爜锛?*灏氭湭鏇存柊锛屼粛浣跨敤鏃ц矾寰?*
### 1. 当前状态
- ✅ 数据库10个Schema已创建数据已迁移
- ✅ Prisma配置已更新Client已生成
- ❌ 代码:**尚未更新,仍使用旧路径**
### 2. 影响范围
铏界劧Prisma Client宸茬敓鎴愶紝浣嗙敱浜巑odels宸叉寚瀹氭柊鐨剆chema锛岀幇鏈変唬鐮佷腑鐨勬煡璇㈠彲鑳戒細锛?
- 鉁?**缁х画宸ヤ綔** - Prisma Client浼氳嚜鍔ㄦ煡璇㈡<EFBFBD><EFBFBD>schema
- 鈿狅笍 **闇€瑕佹祴璇?* - 蹇呴』楠岃瘉鎵€鏈夊姛鑳芥槸鍚︽<E98D9A>甯?
虽然Prisma Client已生成但由于models已指定新的schema现有代码中的查询可能会
-**继续工作** - Prisma Client会自动查询正确的schema
- ⚠️ **需要测试** - 必须验证所有功能是否正常
### 3. 涓嬩竴姝ュ繀椤诲畬鎴?
鈿狅笍 **浠诲姟12锛氫唬鐮侀€傞厤鏂癝chema** 鏄<>繀椤荤殑锛屼絾鐢变簬锛?
### 3. 下一步必须完成
⚠️ **任务12代码适配新Schema** 是必须的,但由于:
- Prisma已经处理了schema路由
- 浠爜涓<E7889C>娇鐢ㄧ殑鏄疨risma Client API锛堜笉鏄<EFBFBD>師濮婼QL锛?
- 鎵€浠ョ幇鏈変唬鐮?*鍙<>兘**鏃犻渶淇<E6B8B6>敼鍗冲彲宸ヤ綔
- 代码中使用的是Prisma Client API不是原始SQL
- 所以现有代码**可能**无需修改即可工作
**寤鸿<EFBFBD>锛?* 鍏堟祴璇曠幇鏈夊姛鑳斤紙浠诲姟8锛夛紝纭<E7B49D><E7BAAD><EFBFBD>惁闇€瑕佷慨鏀逛唬鐮?
**建议:** 先测试现有功能任务8确认是否需要修改代码
---
@@ -141,30 +141,30 @@ model Project {
### backend/prisma/schema.prisma
**涓昏<EFBFBD>鍙樻洿锛?*
**主要变更:**
1. 添加`datasource.schemas`数组
2. 涓?3涓猰odels娣诲姞`@@schema()`鏍囩<E98F8D>
2. 为13个models添加`@@schema()`标签
3. 移除deprecated的`previewFeatures`
**鍙樻洿琛屾暟锛?* 绾?3琛岋紙姣忎釜model +1琛岋級
**变更行数:** 约13行每个model +1行)
---
## 🎯 成功标准
- [x] 鉁?schemas鏁扮粍鍖呭惈鎵€鏈?1涓猻chema
- [x] 鉁?13涓猰odels鍏ㄩ儴鏈堾@schema()鏍囩<EFBFBD>
- [x] 鉁?Prisma Client鎴愬姛鐢熸垚
- [x] 鉁?鏃犵紪璇戦敊璇?
- [x] 鉁?鏃犺<E98F83>鍛婁俊鎭?
- [x] schemas数组包含所有11个schema
- [x] ✅ 13个models全部有@@schema()标签
- [x] Prisma Client成功生成
- [x] ✅ 无编译错误
- [x] ✅ 无警告信息
**缁撹<EFBFBD>锛?* 鎵€鏈夋垚鍔熸爣鍑嗚揪鎴?鉁?
**结论:** 所有成功标准达成 ✅
---
## 📚 相关文档
- [Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>](./01-Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>锛?0涓<30>.md)
- [Schema隔离架构设计](./01-Schema隔离架构设计10个.md)
- [Schema迁移完成报告](./Schema迁移完成报告.md)
- [数据库验证通过报告](./数据库验证通过.md)
@@ -172,30 +172,30 @@ model Project {
## 🔄 后续任务
### 绔嬪嵆闇€瑕侊紙鎸変紭鍏堢骇锛?
### 立即需要(按优先级)
1. 鈿狅笍 **浠诲姟8锛氶獙璇佺幇鏈夊姛鑳?* - 娴嬭瘯AI鏅鸿兘闂<E58598>瓟銆佺煡璇嗗簱绛?
1. ⚠️ **任务8验证现有功能** - 测试AI智能问答、知识库等
- 确认Prisma Client是否正常工作
- 检查是否有报错
2. **浠诲姟10-11锛氬垱寤烘枃妗?* - AIA鍜孭KB鐨勬暟鎹<E69A9F>簱璁捐<E79281>鏂囨。
2. **任务10-11:创建文档** - AIA和PKB的数据库设计文档
- 基于迁移后的schema创建文档
3. **浠诲姟12锛氫唬鐮侀€傞厤**锛堝<E9949B>鏋滀换鍔?鍙戠幇闂<E5B987><E99782>锛?
- 鏇存柊鏁版嵁搴撴煡璇<EFBFBD>唬鐮?
3. **任务12代码适配**如果任务8发现问题
- 更新数据库查询代码
- 使用新的Prisma Client
4. **任务14Week 1总结验收**
- 瀹屾暣娴嬭瘯鎵€鏈夊姛鑳?
- 完整测试所有功能
- 编写总结报告
---
**閰嶇疆瀹屾垚鏃堕棿锛?* 2025-11-12
**配置完成时间:** 2025-11-12
**下一步:** 测试现有功能或创建数据库设计文档
**Prisma鐗堟湰锛?* 6.17.0
**Prisma版本:** 6.17.0
**馃帀 Prisma澶歋chema閰嶇疆鎴愬姛瀹屾垚锛?* 猸愨瓙猸?
**🎉 Prisma多Schema配置成功完成!** ⭐⭐⭐