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:
@@ -1,48 +1,98 @@
|
||||
# ADMIN-餈鞱𨯫蝞∠<EFBFBD>蝡?- 璅∪<E79285>敶枏<E695B6><E69E8F>嗆<EFBFBD><E59786><EFBFBD>撘<EFBFBD><E69298>烐<EFBFBD><E78390>?
|
||||
> **<2A><><EFBFBD>擧凒<E693A7>堆<EFBFBD>** 2026-01-12
|
||||
> **<EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>** <20>?Phase 3.5.5 撌脣<E6928C><E884A3>琜<EFBFBD>Phase 4.0 蝘<><E89D98>蝞∠<E89D9E>撌脣<E6928C><E884A3>?
|
||||
> **<EFBFBD><EFBFBD>𧋦嚗?* v0.4 (Alpha)
|
||||
# ADMIN-运营管理端 - 模块当前状态与开发指南
|
||||
|
||||
> **最后更新:** 2026-01-16
|
||||
> **状态:** ✅ Phase 4.1 用户管理已完成!模块权限系统架构升级完成!
|
||||
> **版本:** v0.5 (Alpha)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 一句话总结
|
||||
|
||||
**餈鞱𨯫蝞∠<EFBFBD>蝡舀糓AI銝游<EFBFBD><EFBFBD>𠉛弦撟喳蝱<EFBFBD><EFBFBD>瓲敹<EFBFBD>恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>堆<EFBFBD><EFBFBD>𣂷<EFBFBD>憭𡁶<EFBFBD><EFBFBD>瑞恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt撌亦<EFBFBD><EFBFBD>𤥁<EFBFBD>霂𨰻<EFBFBD><EFBFBD>鍂<EFBFBD>瑟<EFBFBD><EFBFBD>鞾<EFBFBD>蝵桃<EFBFBD>餈鞱𨯫<EFBFBD>賢<EFBFBD><EFBFBD>?*
|
||||
**运营管理端是AI临床研究平台的核心管理后台,提供多租户管理、Prompt工程化调试、用户权限配置等运营能力。**
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 敶枏<E695B6>撘<EFBFBD><E69298>𤑳𠶖<F0A491B3>?
|
||||
### <20>?撌脣<E6928C><E884A3>琜<EFBFBD>2026-01-11嚗?
|
||||
## 📊 当前开发状态
|
||||
|
||||
### ✅ 已完成(2026-01-11)
|
||||
|
||||
**Phase 0-3:基础架构**
|
||||
- [x] <EFBFBD>唳旿摨?Schema 霈曇恣嚗īlatform_schema, capability_schema嚗?- [x] JWT 霈方<E99C88>蝟餌<E89D9F>嚗Ǒbackend/src/common/auth/`嚗?- [x] <20>餃<EFBFBD>/<2F>餃枂<E9A483>蠘<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>𡒊垢摰峕㟲摰䂿緵嚗?- [x] 霈方<E99C88>銝剝𡢿隞塚<E99A9E>Fastify嚗?- [x] <20>滨垢霈方<E99C88>撖寞𦻖嚗㇁uthContext, LoginPage嚗?- [x] 瘚贝<E7989A><E8B49D>冽<EFBFBD><E586BD>𥕦遣嚗?銝芾<E98A9D><E88ABE>脩鍂<E884A9>瘀<EFBFBD>
|
||||
- [x] 数据库 Schema 设计(platform_schema, capability_schema)
|
||||
- [x] JWT 认证系统(`backend/src/common/auth/`)
|
||||
- [x] 登录/登出功能(前后端完整实现)
|
||||
- [x] 认证中间件(Fastify)
|
||||
- [x] 前端认证对接(AuthContext, LoginPage)
|
||||
- [x] 测试用户创建(8个角色用户)
|
||||
|
||||
**Phase 3.5.1:Prompt 基础设施**
|
||||
- [x] 创建 capability_schema
|
||||
- [x] 瘛餃<EFBFBD> prompt_templates <EFBFBD>?prompt_versions 銵?- [x] 瘛餃<E7989B> prompt:* <20><><EFBFBD>嚗ǒiew/edit/debug/publish嚗?- [x] 餈<>宏 RVW Prompt <20>唳㺭<E594B3>桀<EFBFBD>嚗?銝迎<E98A9D>EDITORIAL, METHODOLOGY嚗?
|
||||
- [x] 添加 prompt_templates 和 prompt_versions 表
|
||||
- [x] 添加 prompt:* 权限(view/edit/debug/publish)
|
||||
- [x] 迁移 RVW Prompt 到数据库(2个:EDITORIAL, METHODOLOGY)
|
||||
|
||||
**Phase 3.5.2:PromptService 核心**
|
||||
- [x] <EFBFBD>啣漲憸<EFBFBD><EFBFBD><EFBFBD>餉<EFBFBD>嚗㇄RAFT/ACTIVE <EFBFBD><EFBFBD><EFBFBD>嚗?- [x] 璅∪<E79285>蝥扯<E89DA5>霂閙綉<E99699>塚<EFBFBD>setDebugMode嚗?- [x] Handlebars 璅⊥踎皜脫<E79A9C>
|
||||
- [x] <EFBFBD>㗛<EFBFBD><EFBFBD>𣂼<EFBFBD>銝擧嵗撉䕘<EFBFBD>extractVariables, validateVariables嚗?- [x] 銝厩漣摰寧<E691B0>嚗<EFBFBD>㺭<EFBFBD>桀<EFBFBD><E6A180>垍<EFBFBD>摮覀<E691AE><E8A680>𨅯<EFBFBD>嚗?- [x] <20>𨅯<EFBFBD> Prompt嚗áardcoded fallbacks嚗?
|
||||
**Phase 3.5.3嚗𡁶恣<EFBFBD>?API**
|
||||
- [x] 8銝?RESTful <20>亙藁嚗<E89781><E59A97>銵具<E98AB5><E585B7>祕<EFBFBD><E7A595><EFBFBD><EFBFBD><EFBFBD>摮塩<E691AE><E5A1A9><EFBFBD>撣<EFBFBD><E692A3><EFBFBD><EFBFBD>皛𠾼<E79A9B><F0A0BEBC><EFBFBD>霂𨰻<E99C82><F0A8B0BB><EFBFBD>霂閙葡<E99699>瓐<EFBFBD><E79390><EFBFBD>蝻枏<E89DBB>嚗?- [x] 頝舐眏瘜典<E7989C>嚗Ǒ/api/admin/prompts`嚗?
|
||||
**Phase 3.5.4嚗𡁜<EFBFBD>蝡舐恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*
|
||||
- [x] 蝞∠<EFBFBD>蝡臬抅蝖<EFBFBD><EFBFBD>嗆<EFBFBD>嚗㇁dminLayout, OrgLayout, 頝舐眏嚗?- [x] 憭游<E686AD>銝𧢲<E98A9D><F0A7A2B2>𨅯<EFBFBD><F0A885AF><EFBFBD>揢<EFBFBD>亙藁
|
||||
- [x] 灰度预览逻辑(DRAFT/ACTIVE 分发)
|
||||
- [x] 模块级调试控制(setDebugMode)
|
||||
- [x] Handlebars 模板渲染
|
||||
- [x] 变量提取与校验(extractVariables, validateVariables)
|
||||
- [x] 三级容灾(数据库→缓存→兜底)
|
||||
- [x] 兜底 Prompt(hardcoded fallbacks)
|
||||
|
||||
**Phase 3.5.3:管理 API**
|
||||
- [x] 8个 RESTful 接口(列表、详情、保存、发布、回滚、调试、测试渲染、清缓存)
|
||||
- [x] 路由注册(`/api/admin/prompts`)
|
||||
|
||||
**Phase 3.5.4:前端管理界面**
|
||||
- [x] 管理端基础架构(AdminLayout, OrgLayout, 路由)
|
||||
- [x] 头像下拉菜单切换入口
|
||||
- [x] PromptListPage(筛选、搜索、调试开关)
|
||||
- [x] PromptEditor(CodeMirror 6 简化版,中文友好)
|
||||
- [x] PromptEditorPage(编辑、保存、发布、测试、版本历史)
|
||||
|
||||
**Phase 3.5.5嚗鑹VW 璅∪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** <20>?撌脣<E6928C><E884A3>琜<EFBFBD>2026-01-12嚗?- [x] RVW editorialService <20><><EFBFBD> PromptService
|
||||
**Phase 3.5.5:RVW 模块集成** ✅ 已完成(2026-01-12)
|
||||
- [x] RVW editorialService 集成 PromptService
|
||||
- [x] RVW methodologyService 集成 PromptService
|
||||
- [x] RVW reviewWorker 隡𣳇<EFBFBD>?userId
|
||||
- [x] 靽桀<EFBFBD> ReviewTask 憭㚚睸蝥行<EFBFBD><EFBFBD>桅<EFBFBD>嚗<EFBFBD>楊 schema 憭㚚睸嚗?- [x] <20>冽芋<E586BD>𡑒恕霂<E68195><E99C82><EFBFBD><EFBFBD><EFBFBD>嚗㇌VW, PKB, ASL, DC嚗?
|
||||
**Phase 4.0嚗𡁶<EFBFBD><EFBFBD>瑚<EFBFBD>璅∪<EFBFBD>蝞∠<EFBFBD>** <20>?撌脣<E6928C><E884A3>琜<EFBFBD>2026-01-12嚗?- [x] <20>啣<EFBFBD> modules 銵剁<E98AB5><E58981>冽<EFBFBD><E586BD>芋<EFBFBD>㛖恣<E39B96><E681A3><EFBFBD>
|
||||
- [x] ModuleService嚗<65><E59A97>蝘<EFBFBD><E89D98>璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>僎嚗?- [x] requireModule 銝剝𡢿隞塚<E99A9E>璅∪<E79285>霈輸䔮<E8BCB8>批<EFBFBD>嚗?- [x] <20><><EFBFBD>劐<EFBFBD><E58A90>⊥芋<E28AA5>埈溶<E59F88>?requireModule 璉<><E79289>?- [x] 蝘<><E89D98>蝞∠<E89D9E><E288A0>𡒊垢 API嚗㇃RUD + 璅∪<E79285><E288AA>滨蔭嚗?- [x] 蝘<><E89D98>蝞∠<E89D9E><E288A0>滨垢<E6BBA8>屸𢒰嚗<F0A292B0><E59A97>銵具<E98AB5><E585B7>祕<EFBFBD><E7A595><EFBFBD><EFBFBD><EFBFBD>颲㻫<E9A2B2><E3BBAB>芋<EFBFBD>烾<EFBFBD>蝵殷<E89DB5>
|
||||
- [x] <20>滨垢璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>冽<EFBFBD><E586BD><EFBFBD>皛歹<E79A9B>擐㚚△ + 撖潸⏛嚗?- [x] Prompt <20>屸𢒰隡睃<E99AA1>嚗<EFBFBD>芋<EFBFBD>𦯀葉<F0A6AF80><E89189>遬蝷箝<E89DB7><E7AE9D><EFBFBD><EFBFBD>砍<EFBFBD><E7A08D>脣<EFBFBD>撘綽<E69298>
|
||||
- [x] RVW reviewWorker 传递 userId
|
||||
- [x] 修复 ReviewTask 外键约束问题(跨 schema 外键)
|
||||
- [x] 全模块认证规范化(RVW, PKB, ASL, DC)
|
||||
|
||||
### <20>?敺<><E695BA><EFBFBD>𡢅<EFBFBD><F0A1A285>劐<EFBFBD><E58A90><EFBFBD>漣嚗?
|
||||
**P1 - <20>冽<EFBFBD>蝞∠<E89D9E>嚗Áeek 4-5嚗?*
|
||||
- [ ] <EFBFBD>冽<EFBFBD>蝞∠<EFBFBD><EFBFBD>屸𢒰嚗<EFBFBD><EFBFBD>銵具<EFBFBD><EFBFBD><EFBFBD>撱箝<EFBFBD><EFBFBD><EFBFBD>颲𡢅<EFBFBD>
|
||||
- [ ] <EFBFBD>冽<EFBFBD>憭𡁶<EFBFBD><EFBFBD>瑕<EFBFBD><EFBFBD>娪<EFBFBD>蝵?- [ ] 閫坿𠧧<E59DBF><F0A0A7A7><EFBFBD><EFBFBD>蠘<EFBFBD>
|
||||
- [ ] <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>亦<EFBFBD>
|
||||
**Phase 4.0:租户与模块管理** ✅ 已完成(2026-01-12)
|
||||
- [x] 新增 modules 表(动态模块管理)
|
||||
- [x] ModuleService(多租户模块权限合并)
|
||||
- [x] requireModule 中间件(模块访问控制)
|
||||
- [x] 所有业务模块添加 requireModule 检查
|
||||
- [x] 租户管理后端 API(CRUD + 模块配置)
|
||||
- [x] 租户管理前端界面(列表、详情、编辑、模块配置)
|
||||
- [x] 前端模块权限动态过滤(首页 + 导航)
|
||||
- [x] Prompt 界面优化(模块中文显示、版本历史增强)
|
||||
|
||||
**Phase 4.1:用户管理** ✅ 已完成(2026-01-16)🎉
|
||||
- [x] 数据库:新增 user_modules 表(精细化模块权限)
|
||||
- [x] 权限系统:新增 4 个用户权限(view/create/edit/delete)
|
||||
- [x] UserService:CRUD + 租户隔离 + 模块权限管理(780 行)
|
||||
- [x] UserController + UserRoutes:13 个 API 端点(648 行)
|
||||
- [x] 批量导入:Excel 批量导入用户功能
|
||||
- [x] UserListPage:列表+筛选+搜索+分页(412 行)
|
||||
- [x] UserFormPage:创建/编辑+租户配置+模块权限(341 行)
|
||||
- [x] UserDetailPage:详情+租户管理+模块权限查看(393 行)
|
||||
- [x] 3 个弹窗组件:导入、分配租户、模块权限配置(592 行)
|
||||
- [x] **架构升级:** 模块权限系统改造(版本系统 → 模块代码系统)
|
||||
|
||||
**架构重大升级:模块权限系统** ✅ 已完成(2026-01-16)🏆
|
||||
- [x] 后端:登录API返回用户可访问模块列表(`modules: ['PKB', 'RVW']`)
|
||||
- [x] 后端:getUserModules() 方法(智能计算用户+租户模块权限)
|
||||
- [x] 前端:AuthContext 添加 hasModule() 方法
|
||||
- [x] 前端:导航栏基于模块权限过滤显示(只显示可访问模块)
|
||||
- [x] 前端:RouteGuard 基于 moduleCode 检查权限
|
||||
- [x] 前端:移除旧的 requiredVersion 系统
|
||||
- [x] 体验优化:登录跳转智能判断(避免普通用户跳转到管理端403)
|
||||
|
||||
### ⏳ 待开发(按优先级)
|
||||
|
||||
**P2 - 用户管理增强(可选)**
|
||||
- [ ] 用户批量操作(批量禁用、批量分配租户)
|
||||
- [ ] 用户操作日志(audit_logs 集成)
|
||||
- [ ] 用户统计分析(活跃度、模块使用率)
|
||||
|
||||
**P2 - Prompt 管理优化**
|
||||
- [ ] Prompt 版本对比功能
|
||||
@@ -50,124 +100,184 @@
|
||||
- [ ] Prompt 导入/导出
|
||||
|
||||
**P2 - 租户高级功能**
|
||||
- [ ] <EFBFBD><EFBFBD><EFBFBD>摰𡁜<EFBFBD><EFBFBD>滨蔭嚗ēogo<EFBFBD><EFBFBD>蜓憸䁅𠧧嚗?- [ ] 蝘<><E89D98>銝枏<E98A9D><E69E8F>餃<EFBFBD>憿?- [ ] <20>漤<EFBFBD>蝞∠<E89D9E><E288A0>屸𢒰
|
||||
- [ ] 品牌定制配置(logo、主题色)
|
||||
- [ ] 租户专属登录页
|
||||
- [ ] 配额管理界面
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD>儭?<3F>唳旿摨梶𠶖<E6A2B6>?
|
||||
## 🗄️ 数据库状态
|
||||
|
||||
### 已有表(需要整合)
|
||||
|
||||
```sql
|
||||
-- <EFBFBD>唳<EFBFBD><EFBFBD><EFBFBD>鍂<EFBFBD>瑁”嚗<EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD>銝<EFBFBD>嚗?public.users -- <20>抒<EFBFBD><E68A92>冽<EFBFBD>銵?platform_schema.User -- <20>啁<EFBFBD><E59581>冽<EFBFBD>銵剁<E98AB5>Prisma嚗?
|
||||
-- 现有的用户表(需要统一)
|
||||
public.users -- 旧的用户表
|
||||
platform_schema.User -- 新的用户表(Prisma)
|
||||
|
||||
-- 现有的审计表
|
||||
public.AdminLog -- 旧的审计日志
|
||||
```
|
||||
|
||||
### <EFBFBD>?撌脣<E6928C>撱箇<E692B1>銵剁<E98AB5>2026-01-12嚗?
|
||||
**platform_schema嚗<61>像<EFBFBD>啣抅蝖<E68A85>嚗?*
|
||||
- <20>?`users` - <20>冽<EFBFBD>銵剁<E98AB5><E58981>?phone, password, role, is_default_password嚗?- <20>?`tenants` - 蝘<><E89D98>銵剁<E98AB5><E58981>?PUBLIC 蝐餃<E89D90>嚗?- <20>?`tenant_members` - 蝘<><E89D98><EFBFBD>𣂼<EFBFBD>嚗<EFBFBD>𣈲<EFBFBD><F0A388B2>鍂<EFBFBD>瑕<EFBFBD><E79195>亙<EFBFBD>銝芰<E98A9D><E88AB0>瘀<EFBFBD>
|
||||
- <20>?`tenant_modules` - 蝘<><E89D98>霈a<E99C88>璅∪<E79285>嚗<EFBFBD>綉<EFBFBD>嗥<EFBFBD><E597A5>瑕虾霈輸䔮<E8BCB8><E494AE><EFBFBD><EFBFBD>踝<EFBFBD>
|
||||
- <20>?`tenant_quotas` - 蝘<><E89D98><EFBFBD>漤<EFBFBD>
|
||||
- <20>?`tenant_quota_allocations` - <20>漤<EFBFBD><E6BCA4><EFBFBD><EFBFBD>
|
||||
- <20>?`departments` - 蝘穃恕銵?- <20>?`permissions` - <20><><EFBFBD>銵剁<E98AB5><E58981>?prompt:*/tenant:* <20><><EFBFBD>嚗?- <20>?`role_permissions` - 閫坿𠧧<E59DBF><F0A0A7A7><EFBFBD>
|
||||
- <20>?`verification_codes` - 撉諹<E69289><E8ABB9><EFBFBD>”
|
||||
- <20>?`modules` - 蝟餌<E89D9F>璅∪<E79285>銵剁<E98AB5><E58981>冽<EFBFBD><E586BD>恣<EFBFBD><E681A3>虾<EFBFBD>冽芋<E586BD>梹<EFBFBD><E6A2B9><EFBFBD> 2026-01-12
|
||||
### ✅ 已创建的表(2026-01-12)
|
||||
|
||||
**capability_schema嚗<EFBFBD><EFBFBD>𡁶鍂<EFBFBD>賢<EFBFBD>嚗?* <20>?<3F>啣<EFBFBD>
|
||||
- <EFBFBD>?`prompt_templates` - Prompt璅⊥踎
|
||||
- <EFBFBD>?`prompt_versions` - Prompt<70><74>𧋦
|
||||
**platform_schema(平台基础)**
|
||||
- ✅ `users` - 用户表(含 phone, password, role, is_default_password)
|
||||
- ✅ `tenants` - 租户表(含 PUBLIC 类型)
|
||||
- ✅ `tenant_members` - 租户成员(支持用户加入多个租户)
|
||||
- ✅ `tenant_modules` - 租户订阅模块(控制租户可访问的功能)
|
||||
- ✅ `tenant_quotas` - 租户配额
|
||||
- ✅ `tenant_quota_allocations` - 配额分配
|
||||
- ✅ `departments` - 科室表
|
||||
- ✅ `permissions` - 权限表(含 prompt:*/tenant:* 权限)
|
||||
- ✅ `role_permissions` - 角色权限
|
||||
- ✅ `verification_codes` - 验证码表
|
||||
- ✅ `modules` - 系统模块表(动态管理可用模块)🆕 2026-01-12
|
||||
|
||||
**capability_schema(通用能力)** ✅ 新增
|
||||
- ✅ `prompt_templates` - Prompt模板
|
||||
- ✅ `prompt_versions` - Prompt版本
|
||||
|
||||
**admin_schema(运营管理)**
|
||||
- `admin_operation_logs` - 运营操作日志
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD>儭?<3F>嗆<EFBFBD>璁<EFBFBD><E79281>
|
||||
## 🏗️ 架构概览
|
||||
|
||||
```
|
||||
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? 餈鞱𨯫蝞∠<E89D9E>蝡荔<E89DA1>ADMIN Portal嚗? <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? <20>𨘻 蝘<><E89D98>蝞∠<E89D9E> <20>? <20>𪈠 <20>冽<EFBFBD>蝞∠<E89D9E> <20>? <20>綫 Prompt蝞∠<E89D9E> <20>?<3F>? <20><> <20>漤<EFBFBD>蝞∠<E89D9E> <20>? <20><> <20><><EFBFBD><EFBFBD>滨蔭 <20>? <20><> 摰∟恣<E2889F>亙<EFBFBD> <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Platform Layer (撟喳蝱撅? <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? 霈方<E99C88>銝剖<E98A9D> <20>?<3F><><EFBFBD>銝剖<E98A9D> <20>?摮睃<E691AE><E79D83>滚𦛚 <20>?<3F>𡁶䰻<F0A181B6>滚𦛚 <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Capability Layer (<28>賢<EFBFBD>撅? <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Prompt蝞∠<E89D9E> <20>?LLM Gateway <20>?<3F><>﹝撘閙<E69298> <20>?RAG撘閙<E69298> <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>?<3F>𢞖<EFBFBD><F0A29E96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? Business Modules (銝𡁜𦛚璅∪<E79285>) <20>?<3F>鎿<EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>? ASL <20>?DC <20>?IIT <20>?PKB <20>?AIA <20>?RVW <20>?SSA <20>?ST <20>?<3F>婙<EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ 运营管理端(ADMIN Portal) │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ 🏢 租户管理 │ 👤 用户管理 │ 🎨 Prompt管理 │
|
||||
│ 📊 配额管理 │ 🔐 权限配置 │ 📋 审计日志 │
|
||||
└─────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Platform Layer (平台层) │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ 认证中心 │ 权限中心 │ 存储服务 │ 通知服务 │
|
||||
└─────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Capability Layer (能力层) │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ Prompt管理 │ LLM Gateway │ 文档引擎 │ RAG引擎 │
|
||||
└─────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Business Modules (业务模块) │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ ASL │ DC │ IIT │ PKB │ AIA │ RVW │ SSA │ ST │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 閫坿𠧧銝擧<E98A9D><E693A7>鞟畆<E99E9F>?
|
||||
## 🔐 角色与权限矩阵
|
||||
|
||||
| 功能模块 | SUPER_ADMIN | PROMPT_ENGINEER | HOSPITAL_ADMIN | PHARMA_ADMIN | USER |
|
||||
|---------|-------------|-----------------|----------------|--------------|------|
|
||||
| 蝘<EFBFBD><EFBFBD>蝞∠<EFBFBD> | <20>?<3F>券<EFBFBD> | <20>?| <20>?| <20>?| <20>?|
|
||||
| Prompt蝞∠<EFBFBD> | <20>?<3F>券<EFBFBD> | <20>?<3F>券<EFBFBD> | <20>?| <20>?| <20>?|
|
||||
| <EFBFBD>冽<EFBFBD>蝞∠<EFBFBD>嚗<EFBFBD><EFBFBD>撅<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||||
| <EFBFBD>冽<EFBFBD>蝞∠<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>瑕<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||||
| <EFBFBD>漤<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <20>?| <20>?| <20>?| <20>?| <20>?|
|
||||
| 摰∟恣<EFBFBD>亙<EFBFBD>嚗<EFBFBD><EFBFBD>撅<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||||
| 摰∟恣<EFBFBD>亙<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>瑕<EFBFBD>嚗?| <20>?| <20>?| <20>?| <20>?| <20>?|
|
||||
| 銝𡁜𦛚璅∪<EFBFBD>雿輻鍂 | <20>?| <20>?| <20>?| <20>?| <20>?|
|
||||
| 租户管理 | ✅ 全部 | ❌ | ❌ | ❌ | ❌ |
|
||||
| Prompt管理 | ✅ 全部 | ✅ 全部 | ❌ | ❌ | ❌ |
|
||||
| 用户管理(全局) | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||||
| 用户管理(租户内) | ✅ | ❌ | ✅ | ✅ | ❌ |
|
||||
| 配额分配 | ✅ | ❌ | ✅ | ✅ | ❌ |
|
||||
| 审计日志(全局) | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||||
| 审计日志(租户内) | ✅ | ❌ | ✅ | ✅ | ❌ |
|
||||
| 业务模块使用 | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 📁 代码结构
|
||||
|
||||
### <EFBFBD>?摰鮋<E691B0>撌脣<E6928C><E884A3>鞟<EFBFBD>蝏𤘪<E89D8F>嚗?026-01-12嚗?
|
||||
### ✅ 实际已完成的结构(2026-01-12)
|
||||
|
||||
**后端**
|
||||
```
|
||||
backend/src/
|
||||
├── common/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth/ # <EFBFBD>?霈方<E99C88>璅∪<E79285>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> jwt.service.ts # JWT Token蝞∠<EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.service.ts # 銝𡁜𦛚<EFBFBD>餉<EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.middleware.ts # 霈方<EFBFBD>銝剝𡢿隞?+ requireModule <EFBFBD><EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> module.service.ts # <EFBFBD><EFBFBD> 璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>滚𦛚嚗<F0A69B9A><E59A97>蝘<EFBFBD><E89D98><EFBFBD><EFBFBD>僎嚗?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.controller.ts # API<50>批<EFBFBD><E689B9>?+ getUserModules <20><>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.routes.ts # 頝舐眏
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> index.ts
|
||||
<EFBFBD>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> prompt/ # <20>?Prompt蝞∠<E89D9E>
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.types.ts # 蝐餃<E89D90>摰帋<E691B0>
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.service.ts # <20>詨<EFBFBD><E8A9A8>滚𦛚
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> prompt.controller.ts # API<50>批<EFBFBD><E689B9>剁<EFBFBD>憓𧼮撩<F0A7BCAE><E692A9>𧋦餈𥪜<E9A488>嚗咓<E59A97>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.routes.ts # 頝舐眏
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> prompt.fallbacks.ts # <20>𨅯<EFBFBD>Prompt
|
||||
<EFBFBD>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> index.ts
|
||||
<EFBFBD>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> modules/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> admin/ # <20><> 蝘<><E89D98>蝞∠<E89D9E>璅∪<E79285>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> types/
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenant.types.ts # 蝘<><E89D98>蝐餃<E89D90>摰帋<E691B0>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> services/
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantService.ts # 蝘<><E89D98>銝𡁜𦛚<F0A1819C>餉<EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> controllers/
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantController.ts # 蝘<><E89D98><EFBFBD>批<EFBFBD><E689B9>?<3F>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> routes/
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantRoutes.ts # 蝘<><E89D98>頝舐眏
|
||||
<EFBFBD>? <20>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> rvw/ # <20>?RVW璅∪<E79285>嚗<EFBFBD>歇<EFBFBD><E6AD87><EFBFBD>PromptService嚗?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> pkb/ # <20>?PKB璅∪<E79285>嚗<EFBFBD>歇瘛餃<E7989B>霈方<E99C88>嚗?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> asl/ # <20>?ASL璅∪<E79285>嚗<EFBFBD>歇瘛餃<E7989B>霈方<E99C88>嚗?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> dc/ # <20>?DC璅∪<E79285>嚗<EFBFBD>歇瘛餃<E7989B>霈方<E99C88>嚗?
|
||||
│ ├── auth/ # ✅ 认证模块
|
||||
│ │ ├── jwt.service.ts # JWT Token管理
|
||||
│ │ ├── auth.service.ts # 业务逻辑
|
||||
│ │ ├── auth.middleware.ts # 认证中间件 + requireModule 🆕
|
||||
│ │ ├── module.service.ts # 🆕 模块权限服务(多租户合并)
|
||||
│ │ ├── auth.controller.ts # API控制器 + getUserModules 🆕
|
||||
│ │ ├── auth.routes.ts # 路由
|
||||
│ │ └── index.ts
|
||||
│ │
|
||||
│ └── prompt/ # ✅ Prompt管理
|
||||
│ ├── prompt.types.ts # 类型定义
|
||||
│ ├── prompt.service.ts # 核心服务
|
||||
│ ├── prompt.controller.ts # API控制器(增强版本返回)🆕
|
||||
│ ├── prompt.routes.ts # 路由
|
||||
│ ├── prompt.fallbacks.ts # 兜底Prompt
|
||||
│ └── index.ts
|
||||
│
|
||||
├── modules/
|
||||
│ ├── admin/ # 🆕 租户管理模块
|
||||
│ │ ├── types/
|
||||
│ │ │ └── tenant.types.ts # 租户类型定义
|
||||
│ │ ├── services/
|
||||
│ │ │ └── tenantService.ts # 租户业务逻辑
|
||||
│ │ ├── controllers/
|
||||
│ │ │ └── tenantController.ts # 租户控制器
|
||||
│ │ └── routes/
|
||||
│ │ └── tenantRoutes.ts # 租户路由
|
||||
│ │
|
||||
│ ├── rvw/ # ✅ RVW模块(已集成PromptService)
|
||||
│ ├── pkb/ # ✅ PKB模块(已添加认证)
|
||||
│ ├── asl/ # ✅ ASL模块(已添加认证)
|
||||
│ └── dc/ # ✅ DC模块(已添加认证)
|
||||
|
||||
backend/scripts/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> seed-modules.js # <EFBFBD><EFBFBD> 璅∪<E79285><E288AA>唳旿<E594B3>嘥<EFBFBD><E598A5>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> query-users.js # <20>亥砭<E4BAA5>冽<EFBFBD><E586BD>𣬚<EFBFBD><F0A3AC9A>瑚縑<E7919A>?<3F>婙<EFBFBD><E5A999><EFBFBD> [<5B>嗡<EFBFBD><E597A1>𡁏𧋦]
|
||||
├── seed-modules.js # 🆕 模块数据初始化
|
||||
├── query-users.js # 查询用户和租户信息
|
||||
└── [其他脚本]
|
||||
```
|
||||
|
||||
**前端**
|
||||
```
|
||||
frontend-v2/src/
|
||||
├── framework/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth/ # <EFBFBD>?霈方<E99C88>獢<EFBFBD>沲
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> AuthContext.tsx # 霈方<EFBFBD>銝𠹺<EFBFBD><EFBFBD>?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> api.ts # 霈方<E99C88>API
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> moduleApi.ts # <20><> <20>冽<EFBFBD>璅∪<E79285><E288AA><EFBFBD><EFBFBD>API
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> types.ts
|
||||
<EFBFBD>? <20>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> modules/ # <20>?璅∪<E79285>瘜典<E7989C>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> moduleRegistry.ts # 璅∪<E79285>瘜典<E7989C>嚗<EFBFBD>鰵憓𤆣oduleCode嚗咓<E59A97>?<3F>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> types.ts # 璅∪<E79285>蝐餃<E89D90>摰帋<E691B0>
|
||||
<EFBFBD>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> layout/ # <EFBFBD>?撣<><E692A3>蝏<EFBFBD>辣
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> MainLayout.tsx # 銝𡁜𦛚蝡臬<E89DA1>撅<EFBFBD>
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> AdminLayout.tsx # 餈鞱𨯫蝞∠<E89D9E>蝡臬<E89DA1>撅<EFBFBD>
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> OrgLayout.tsx # <20>箸<EFBFBD>蝞∠<E89D9E>蝡臬<E89DA1>撅<EFBFBD>
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> TopNavigation.tsx # 憿園<E686BF>撖潸⏛嚗<E28F9B>芋<EFBFBD>埈<EFBFBD><E59F88>鞱<EFBFBD>皛歹<E79A9B><E6ADB9><EFBFBD>
|
||||
<EFBFBD>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> pages/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> HomePage.tsx # 擐㚚△嚗<E296B3>芋<EFBFBD>埈<EFBFBD><E59F88>鞱<EFBFBD>皛歹<E79A9B><E6ADB9><EFBFBD>
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> admin/ # <20>?餈鞱𨯫蝞∠<E89D9E>蝡舫△<E888AB>?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> AdminDashboard.tsx # 璁<><E79281>憿?<3F>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptListPage.tsx # Prompt<70>𡑒”嚗<E2809D>芋<EFBFBD>𦯀葉<F0A6AF80><E89189>遬蝷綽<E89DB7><E7B6BD><EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptEditorPage.tsx # Prompt蝻𤥁<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>砍<EFBFBD><EFBFBD>脣<EFBFBD>撘綽<EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> tenants/ # <20><> 蝘<><E89D98>蝞∠<E89D9E>憿菟𢒰
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantListPage.tsx # 蝘<><E89D98><EFBFBD>𡑒”
|
||||
<EFBFBD>? <20>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantDetailPage.tsx # 蝘<><E89D98>霂行<E99C82>/蝻𤥁<E89DBB>/璅∪<E79285><E288AA>滨蔭
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> api/
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> tenantApi.ts # 蝘<EFBFBD><EFBFBD>API靚<EFBFBD>鍂
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptListPage.tsx # <EFBFBD>?Prompt<EFBFBD>𡑒”嚗?54銵䕘<E98AB5>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptEditorPage.tsx # <EFBFBD>?Prompt蝻𤥁<EFBFBD><EFBFBD>剁<EFBFBD>399銵䕘<EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> components/
|
||||
<EFBFBD>? <20>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> PromptEditor.tsx # <20>?CodeMirror 6嚗?45銵䕘<E98AB5>
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> api/
|
||||
<EFBFBD>? <20>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> promptApi.ts # <20>?API靚<49>鍂撅<E98D82><E69285>172銵䕘<E98AB5>
|
||||
<EFBFBD>? <20>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> org/ # <20>?<3F>箸<EFBFBD>蝞∠<E89D9E>蝡舫△<E888AB>?<3F>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> OrgDashboard.tsx # 璁<><E79281>憿?<3F>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> LoginPage.tsx # <20>?<3F>𡁶鍂<F0A181B6>餃<EFBFBD>憿蛛<E686BF>368銵䕘<E98AB5>
|
||||
│ ├── auth/ # ✅ 认证框架
|
||||
│ │ ├── AuthContext.tsx # 认证上下文
|
||||
│ │ ├── api.ts # 认证API
|
||||
│ │ ├── moduleApi.ts # 🆕 用户模块权限API
|
||||
│ │ └── types.ts
|
||||
│ │
|
||||
│ ├── modules/ # ✅ 模块注册
|
||||
│ │ ├── moduleRegistry.ts # 模块注册(新增moduleCode)🆕
|
||||
│ │ └── types.ts # 模块类型定义
|
||||
│ │
|
||||
│ └── layout/ # ✅ 布局组件
|
||||
│ ├── MainLayout.tsx # 业务端布局
|
||||
│ ├── AdminLayout.tsx # 运营管理端布局
|
||||
│ ├── OrgLayout.tsx # 机构管理端布局
|
||||
│ └── TopNavigation.tsx # 顶部导航(模块权限过滤)🆕
|
||||
│
|
||||
├── pages/
|
||||
│ ├── HomePage.tsx # 首页(模块权限过滤)🆕
|
||||
│ ├── admin/ # ✅ 运营管理端页面
|
||||
│ │ ├── AdminDashboard.tsx # 概览页
|
||||
│ │ ├── PromptListPage.tsx # Prompt列表(模块中文显示)🆕
|
||||
│ │ ├── PromptEditorPage.tsx # Prompt编辑(版本历史增强)🆕
|
||||
│ │ ├── tenants/ # 🆕 租户管理页面
|
||||
│ │ │ ├── TenantListPage.tsx # 租户列表
|
||||
│ │ │ ├── TenantDetailPage.tsx # 租户详情/编辑/模块配置
|
||||
│ │ │ └── api/
|
||||
│ │ │ └── tenantApi.ts # 租户API调用
|
||||
│ │ ├── PromptListPage.tsx # ✅ Prompt列表(254行)
|
||||
│ │ ├── PromptEditorPage.tsx # ✅ Prompt编辑器(399行)
|
||||
│ │ ├── components/
|
||||
│ │ │ └── PromptEditor.tsx # ✅ CodeMirror 6(245行)
|
||||
│ │ └── api/
|
||||
│ │ └── promptApi.ts # ✅ API调用层(172行)
|
||||
│ │
|
||||
│ ├── org/ # ✅ 机构管理端页面
|
||||
│ │ └── OrgDashboard.tsx # 概览页
|
||||
│ │
|
||||
│ └── LoginPage.tsx # ✅ 通用登录页(368行)
|
||||
```
|
||||
|
||||
### 📋 原计划结构(待开发)
|
||||
@@ -177,29 +287,34 @@ frontend-v2/src/
|
||||
```
|
||||
backend/src/
|
||||
├── modules/
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> admin/ # 餈鞱𨯫蝞∠<EFBFBD>蝡舀芋<EFBFBD>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> controllers/
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> tenant.controller.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> user.controller.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> audit.controller.ts
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> services/
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> tenant.service.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> user.service.ts
|
||||
<EFBFBD>? <EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> audit.service.ts
|
||||
<EFBFBD>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> routes/
|
||||
<EFBFBD>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> admin.routes.ts
|
||||
<EFBFBD>?<3F>鎿<EFBFBD><E98EBF><EFBFBD> common/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> capabilities/
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> prompt/ # Prompt蝞∠<E89D9E>蝟餌<E89D9F>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.service.ts # <20>詨<EFBFBD><E8A9A8>餉<EFBFBD>
|
||||
<EFBFBD>? <20>? <20>鎿<EFBFBD><E98EBF><EFBFBD> prompt.controller.ts
|
||||
<EFBFBD>? <20>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> prompt.routes.ts
|
||||
<EFBFBD>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> middleware/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.middleware.ts # JWT霈方<E99C88>
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> permission.middleware.ts # <20><><EFBFBD>璉<EFBFBD><E79289>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> tenant.middleware.ts # 蝘<><E89D98><EFBFBD>𠉛氖
|
||||
<EFBFBD>?<3F>婙<EFBFBD><E5A999><EFBFBD> platform/
|
||||
│ └── admin/ # 运营管理端模块
|
||||
│ ├── controllers/
|
||||
│ │ ├── tenant.controller.ts
|
||||
│ │ ├── user.controller.ts
|
||||
│ │ └── audit.controller.ts
|
||||
│ ├── services/
|
||||
│ │ ├── tenant.service.ts
|
||||
│ │ ├── user.service.ts
|
||||
│ │ └── audit.service.ts
|
||||
│ └── routes/
|
||||
│ └── admin.routes.ts
|
||||
│
|
||||
├── common/
|
||||
│ ├── capabilities/
|
||||
│ │ └── prompt/ # Prompt管理系统
|
||||
│ │ ├── prompt.service.ts # 核心逻辑
|
||||
│ │ ├── prompt.controller.ts
|
||||
│ │ └── prompt.routes.ts
|
||||
│ │
|
||||
│ └── middleware/
|
||||
│ ├── auth.middleware.ts # JWT认证
|
||||
│ ├── permission.middleware.ts # 权限检查
|
||||
│ └── tenant.middleware.ts # 租户隔离
|
||||
│
|
||||
└── platform/
|
||||
├── auth/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> auth.service.ts
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> jwt.service.ts
|
||||
│ ├── auth.service.ts
|
||||
│ └── jwt.service.ts
|
||||
└── permission/
|
||||
└── permission.service.ts
|
||||
```
|
||||
@@ -209,27 +324,35 @@ backend/src/
|
||||
```
|
||||
frontend-v2/src/
|
||||
├── modules/
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> admin/ # 餈鞱𨯫蝞∠<EFBFBD>蝡舀芋<EFBFBD>?<3F>? <20>鎿<EFBFBD><E98EBF><EFBFBD> pages/
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantManagement/ # 蝘<><E89D98>蝞∠<E89D9E>
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> UserManagement/ # <20>冽<EFBFBD>蝞∠<E89D9E>
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptManagement/ # Prompt蝞∠<E89D9E>
|
||||
<EFBFBD>? <EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> AuditLog/ # 摰∟恣<E2889F>亙<EFBFBD>
|
||||
<EFBFBD>? <EFBFBD>?<3F>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> components/
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> TenantForm/
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> UserForm/
|
||||
<EFBFBD>? <EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> PromptEditor/
|
||||
<EFBFBD>? <20>? <20>婙<EFBFBD><E5A999><EFBFBD> PromptDebugSwitch/ # <20>典<EFBFBD>靚<EFBFBD><E99D9A>撘<EFBFBD><E69298>?<3F>? <20>?<3F>? <20>婙<EFBFBD><E5A999><EFBFBD> services/
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> tenant.service.ts
|
||||
<EFBFBD>? <EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> user.service.ts
|
||||
<EFBFBD>? <EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> prompt.service.ts
|
||||
<EFBFBD>?<3F>婙<EFBFBD><E5A999><EFBFBD> framework/
|
||||
│ └── admin/ # 运营管理端模块
|
||||
│ ├── pages/
|
||||
│ │ ├── TenantManagement/ # 租户管理
|
||||
│ │ ├── UserManagement/ # 用户管理
|
||||
│ │ ├── PromptManagement/ # Prompt管理
|
||||
│ │ └── AuditLog/ # 审计日志
|
||||
│ │
|
||||
│ ├── components/
|
||||
│ │ ├── TenantForm/
|
||||
│ │ ├── UserForm/
|
||||
│ │ ├── PromptEditor/
|
||||
│ │ └── PromptDebugSwitch/ # 全局调试开关
|
||||
│ │
|
||||
│ └── services/
|
||||
│ ├── tenant.service.ts
|
||||
│ ├── user.service.ts
|
||||
│ └── prompt.service.ts
|
||||
│
|
||||
└── framework/
|
||||
├── auth/
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> AuthContext.tsx # 霈方<EFBFBD>銝𠹺<EFBFBD><EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> permission/
|
||||
<20>婙<EFBFBD><E5A999><EFBFBD> PermissionContext.tsx # <20><><EFBFBD>銝𠹺<E98A9D><F0A0B9BA>?```
|
||||
│ └── AuthContext.tsx # 认证上下文
|
||||
└── permission/
|
||||
└── PermissionContext.tsx # 权限上下文
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 敹恍<E695B9>笔<EFBFBD>憪见<E686AA><E8A781>?
|
||||
## 🚀 快速开始开发
|
||||
|
||||
### 1. 环境准备
|
||||
|
||||
```bash
|
||||
@@ -243,14 +366,16 @@ cd frontend-v2
|
||||
# 无需额外依赖,使用现有技术栈
|
||||
```
|
||||
|
||||
### 2. <EFBFBD>唳旿摨枏<EFBFBD>憭?
|
||||
### 2. 数据库准备
|
||||
|
||||
```bash
|
||||
# 1. 备份现有数据
|
||||
cd backend
|
||||
npx prisma db pull --schema=./prisma/backup.prisma
|
||||
|
||||
# 2. 更新Schema
|
||||
# 蝻𤥁<EFBFBD> prisma/schema.prisma嚗峕溶<EFBFBD>䭾鰵銵?
|
||||
# 编辑 prisma/schema.prisma,添加新表
|
||||
|
||||
# 3. 生成迁移
|
||||
npx prisma migrate dev --name add_admin_and_prompt_tables
|
||||
|
||||
@@ -260,15 +385,16 @@ npx prisma db seed
|
||||
|
||||
### 3. 开发优先级
|
||||
|
||||
**<2A>𣞁 敹<>◆<EFBFBD><E29786><EFBFBD>嚗㇊hase 0嚗?*
|
||||
**🔴 必须先做(Phase 0)**
|
||||
1. 数据库迁移(统一User表)
|
||||
2. <20>𥕦遣頞<E981A3>漣蝞∠<E89D9E><E288A0>䁅揭<E48185>?3. JWT霈方<E99C88>蝟餌<E89D9F>
|
||||
2. 创建超级管理员账号
|
||||
3. JWT认证系统
|
||||
|
||||
**<2A><> <20>嗅<EFBFBD><E59785>𡄯<EFBFBD>Phase 1嚗?*
|
||||
**🟠 然后做(Phase 1)**
|
||||
1. PromptService实现
|
||||
2. Prompt管理API
|
||||
|
||||
**<2A>椬 <20><><EFBFBD>𤾸<EFBFBD>嚗㇊hase 2嚗?*
|
||||
**🟡 最后做(Phase 2)**
|
||||
1. 租户管理界面
|
||||
2. Prompt管理界面
|
||||
|
||||
@@ -276,27 +402,32 @@ npx prisma db seed
|
||||
|
||||
## 📚 核心文档导航
|
||||
|
||||
### 敹<EFBFBD>粉<EFBFBD><EFBFBD>﹝嚗<EFBFBD><EFBFBD><EFBFBD>穃<EFBFBD>嚗?
|
||||
### 必读文档(开发前)
|
||||
|
||||
1. **架构梳理**
|
||||
`00-系统设计/00-权限与角色体系梳理报告_v1.0.md`
|
||||
<EFBFBD>?鈭<>圾<EFBFBD>港<EFBFBD><E6B8AF>嗆<EFBFBD><E59786><EFBFBD>㺭<EFBFBD>桀<EFBFBD>霈曇恣<E69B87><E681A3><EFBFBD><EFBFBD>質楝蝥踹㦛
|
||||
→ 了解整体架构、数据库设计、实施路线图
|
||||
|
||||
2. **需求文档**
|
||||
`01-需求分析/02-通用能力层_07-运营与机构管理端PRD_v2.1.md`
|
||||
→ 了解业务需求、用户故事、验收标准
|
||||
|
||||
2. **<2A><>瘙<EFBFBD><E79899>獢?*
|
||||
`01-<2D><>瘙<EFBFBD><E79899><EFBFBD>?02-<2D>𡁶鍂<F0A181B6>賢<EFBFBD>撅<EFBFBD>07-餈鞱𨯫銝擧㦤<E693A7><E3A6A4>恣<EFBFBD><E681A3>垢PRD_v2.1.md`
|
||||
<20>?鈭<>圾銝𡁜𦛚<F0A1819C><F0A69B9A>瘙<EFBFBD><E79899><EFBFBD>鍂<EFBFBD>瑟<EFBFBD>鈭卝<E988AD><E58D9D><EFBFBD><EFBFBD>嗆<EFBFBD><E59786>?
|
||||
3. **Prompt管理(核心)**
|
||||
`02-<EFBFBD><EFBFBD><EFBFBD>航挽霈?03-Prompt蝞∠<EFBFBD>蝟餌<EFBFBD>敹恍<EFBFBD>笔<EFBFBD><EFBFBD>?md`
|
||||
<EFBFBD>?鈭<>圾Prompt蝞∠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>?
|
||||
### 撘<><E69298>睲葉<E79DB2><E89189><EFBFBD>?
|
||||
1. **<2A><><EFBFBD>航挽霈?*
|
||||
`02-<2D><><EFBFBD>航挽霈?02-<2D>𡁶鍂<F0A181B6>賢<EFBFBD>撅<EFBFBD>03-Prompt蝞∠<E89D9E>蝟餌<E89D9F>銝𡒊<E98A9D>摨阡<E691A8>閫<EFBFBD>挽霈⊥䲮獢?md`
|
||||
`02-技术设计/03-Prompt管理系统快速参考.md`
|
||||
→ 了解Prompt管理的实现细节
|
||||
|
||||
### 开发中参考
|
||||
|
||||
1. **技术设计**
|
||||
`02-技术设计/02-通用能力层_03-Prompt管理系统与灰度预览设计方案.md`
|
||||
|
||||
2. **反馈建议**
|
||||
`00-蝟餌<EFBFBD>霈曇恣/02-<2D>𡁶鍂<F0A181B6>賢<EFBFBD>撅<EFBFBD>10-<2D><><EFBFBD>雿梶頂璇喟<E79287><E5969F>漤<EFBFBD>銝𦒘耨甇<E880A8>遣霈?md`
|
||||
`00-系统设计/02-通用能力层_10-权限体系梳理反馈与修正建议.md`
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>圲 <20><><EFBFBD>航<EFBFBD><E888AA>?
|
||||
## 🔧 技术要点
|
||||
|
||||
### 1. JWT认证
|
||||
|
||||
```typescript
|
||||
@@ -305,7 +436,8 @@ const token = jwt.sign(
|
||||
{
|
||||
userId: user.id,
|
||||
role: user.role,
|
||||
tenantId: user.tenantId // 憭𡁶<EFBFBD><EFBFBD>? },
|
||||
tenantId: user.tenantId // 多租户
|
||||
},
|
||||
process.env.JWT_SECRET,
|
||||
{ expiresIn: '7d' }
|
||||
);
|
||||
@@ -314,7 +446,8 @@ const token = jwt.sign(
|
||||
const decoded = jwt.verify(token, process.env.JWT_SECRET);
|
||||
```
|
||||
|
||||
### 2. 憭𡁶<EFBFBD><EFBFBD>琿<EFBFBD>蝳?
|
||||
### 2. 多租户隔离
|
||||
|
||||
```typescript
|
||||
// 中间件:自动注入tenantId
|
||||
fastify.addHook('preHandler', async (request, reply) => {
|
||||
@@ -322,7 +455,8 @@ fastify.addHook('preHandler', async (request, reply) => {
|
||||
request.tenantId = user.tenantId;
|
||||
});
|
||||
|
||||
// ORM<EFBFBD>亥砭嚗朞䌊<EFBFBD>刻<EFBFBD>皛?const projects = await prisma.project.findMany({
|
||||
// ORM查询:自动过滤
|
||||
const projects = await prisma.project.findMany({
|
||||
where: { tenantId: request.tenantId }
|
||||
});
|
||||
```
|
||||
@@ -338,7 +472,8 @@ async get(code: string, variables: any, userId: string) {
|
||||
if (draft) return this.render(draft.content, variables);
|
||||
}
|
||||
|
||||
// <EFBFBD>桅<EFBFBD>𡁶鍂<EFBFBD>瑞<EFBFBD>ACTIVE<EFBFBD><EFBFBD>𧋦嚗<EFBFBD>蒂蝻枏<EFBFBD>嚗? const active = await this.getActiveVersion(code);
|
||||
// 普通用户看ACTIVE版本(带缓存)
|
||||
const active = await this.getActiveVersion(code);
|
||||
return this.render(active.content, variables);
|
||||
}
|
||||
```
|
||||
@@ -347,11 +482,15 @@ async get(code: string, variables: any, userId: string) {
|
||||
|
||||
## ⚠️ 常见问题
|
||||
|
||||
### Q1: <EFBFBD>唳<EFBFBD><EFBFBD><EFBFBD>public.users`銵冽<EFBFBD>𦒘<EFBFBD>憭<EFBFBD><EFBFBD>嚗?
|
||||
### Q1: 现有的`public.users`表怎么处理?
|
||||
|
||||
**A:** Phase 0会执行数据迁移:
|
||||
1. 将`public.users`数据迁移到`platform_schema.users`
|
||||
2. <EFBFBD>滚𦶢<EFBFBD>滢蛹`public.users_backup`靽萘<EFBFBD>1<EFBFBD>?3. 撉諹<E69289><E8ABB9>㰘秤<E3B098>𤾸<EFBFBD><F0A4BEB8>?
|
||||
### Q2: Prompt蝞∠<E89D9E>隡𡁜蔣<F0A1819C>滨緵<E6BBA8>劐<EFBFBD><E58A90>⊥芋<E28AA5>堒<EFBFBD>嚗?
|
||||
2. 重命名为`public.users_backup`保留1周
|
||||
3. 验证无误后删除
|
||||
|
||||
### Q2: Prompt管理会影响现有业务模块吗?
|
||||
|
||||
**A:** 不会。Prompt管理是增量功能:
|
||||
- 现有硬编码Prompt继续工作
|
||||
- 新开发模块调用`promptService.get()`
|
||||
@@ -359,26 +498,34 @@ async get(code: string, variables: any, userId: string) {
|
||||
|
||||
### Q3: 调试模式安全吗?
|
||||
|
||||
**A:** <EFBFBD>舐<EFBFBD>嚗峕<EFBFBD>憭𡁜<EFBFBD>靽嗪<EFBFBD>嚗?- <20><><EFBFBD>璉<EFBFBD><E79289>伐<EFBFBD>`prompt:debug`嚗?- <20>嗆<EFBFBD><E59786><EFBFBD><EFBFBD>典銁<E585B8><E98A81><EFBFBD>嚗<EFBFBD>蒈<EFBFBD>箄䌊<E7AE84>典仃<E585B8><E4BB83><EFBFBD>
|
||||
- 摰∟恣<EFBFBD>亙<EFBFBD>霈啣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD>雿?
|
||||
**A:** 是的,有多层保障:
|
||||
- 权限检查(`prompt:debug`)
|
||||
- 状态存储在内存(登出自动失效)
|
||||
- 审计日志记录所有操作
|
||||
|
||||
### Q4: 多租户隔离如何保证?
|
||||
|
||||
**A:** 銝匧<EFBFBD><EFBFBD>脫擪嚗?1. **API撅?*嚗帋葉<E5B88B>港辣璉<E8BEA3><E79289>匝tenantId`
|
||||
2. **Service撅?*嚗朞䌊<E69C9E>冽釣<E586BD>匝tenantId`餈<EFBFBD>誘
|
||||
3. **DB撅?*嚗𡄯<E59A97>Phase 2嚗侨risma Extension撘箏<E69298><E7AE8F>𠉛氖
|
||||
**A:** 三层防护:
|
||||
1. **API层**:中间件检查`tenantId`
|
||||
2. **Service层**:自动注入`tenantId`过滤
|
||||
3. **DB层**:(Phase 2)Prisma Extension强制隔离
|
||||
|
||||
---
|
||||
|
||||
## 📞 需要帮助?
|
||||
|
||||
1. **<EFBFBD>亦<EFBFBD><EFBFBD><EFBFBD>﹝**嚗䫤README.md` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>航挽霈⊥<E99C88>獢?2. **<EFBFBD>亦<EFBFBD>隞<EFBFBD><EFBFBD>**嚗𡁜<E59A97><F0A1819C><EFBFBD>C/ASL蝑匧歇<E58CA7>㗇芋<E39787>㛖<EFBFBD>摰䂿緵
|
||||
3. **<EFBFBD>鞾䔮**嚗𡁜銁撘<E98A81><E69298>𤏸扇敶蓥葉霈啣<E99C88><E595A3>桅<EFBFBD><E6A185>諹圾<E8ABB9>單䲮獢?
|
||||
1. **查看文档**:`README.md` 和各技术设计文档
|
||||
2. **查看代码**:参考DC/ASL等已有模块的实现
|
||||
3. **提问**:在开发记录中记录问题和解决方案
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 銝衤<E98A9D>甇亥<E79487><E4BAA5>?
|
||||
## 📅 下一步行动
|
||||
|
||||
- [ ] Review架构设计文档
|
||||
- [ ] 确认开发排期(建议4周)
|
||||
- [ ] <EFBFBD><EFBFBD><EFBFBD>撘<EFBFBD><EFBFBD>𤑳㴓憓?- [ ] **<EFBFBD>臬𢆡Phase 0**嚗𡁏㺭<F0A1818F>桀<EFBFBD>餈<EFBFBD>宏
|
||||
- [ ] 准备开发环境
|
||||
- [ ] **启动Phase 0**:数据库迁移
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user