169 lines
4.8 KiB
Markdown
169 lines
4.8 KiB
Markdown
# InsightFlow Phase 8 Task 1 - 多租户 SaaS 架构
|
||
|
||
**开发时间**: 2026-02-25
|
||
**状态**: ✅ 已完成
|
||
|
||
## 概述
|
||
|
||
Phase 8 Task 1 实现了 InsightFlow 平台的多租户 SaaS 架构,为商业化运营奠定基础。该架构支持数据隔离、自定义域名、品牌白标和租户级权限管理。
|
||
|
||
## 核心功能
|
||
|
||
### 1. 租户管理
|
||
- **租户创建**: 支持 Free/Pro/Enterprise 多层级订阅
|
||
- **Slug 管理**: 自动生成 URL 友好的唯一标识
|
||
- **状态管理**: pending/active/suspended/trial/expired
|
||
- **资源限制**: 按层级分配不同的资源配额
|
||
|
||
### 2. 自定义域名绑定 (CNAME)
|
||
- **域名添加**: 支持自定义域名绑定
|
||
- **验证机制**: DNS TXT 记录验证或文件验证
|
||
- **SSL 支持**: 预留 SSL 证书管理接口
|
||
- **主域名设置**: 支持设置主域名
|
||
|
||
### 3. 品牌白标
|
||
- **Logo/Favicon**: 自定义品牌标识
|
||
- **主题色**: 主色和次色自定义
|
||
- **自定义 CSS**: 支持自定义样式
|
||
- **自定义 JS**: 支持自定义脚本
|
||
- **登录页背景**: 自定义登录页面
|
||
- **动态 CSS 生成**: 自动生成品牌 CSS 变量
|
||
|
||
### 4. 租户级权限管理
|
||
- **角色系统**: Owner/Admin/Member/Viewer
|
||
- **权限映射**: 预定义角色权限
|
||
- **成员邀请**: 邮件邀请机制
|
||
- **邀请接受**: 用户接受邀请流程
|
||
- **权限检查**: 细粒度权限验证
|
||
|
||
### 5. 资源使用统计
|
||
- **用量记录**: 存储、转录、API 调用等
|
||
- **统计查询**: 按时间范围查询使用量
|
||
- **限制检查**: 实时检查资源是否超限
|
||
- **使用百分比**: 计算各项资源使用比例
|
||
|
||
## 技术实现
|
||
|
||
### 数据库表结构
|
||
|
||
```sql
|
||
-- 租户主表
|
||
tenants:
|
||
- id, name, slug, description
|
||
- tier (free/pro/enterprise)
|
||
- status, owner_id
|
||
- settings, resource_limits, metadata
|
||
|
||
-- 租户域名表
|
||
tenant_domains:
|
||
- id, tenant_id, domain
|
||
- status, verification_token
|
||
- is_primary, ssl_enabled
|
||
|
||
-- 租户品牌配置表
|
||
tenant_branding:
|
||
- id, tenant_id
|
||
- logo_url, favicon_url
|
||
- primary_color, secondary_color
|
||
- custom_css, custom_js
|
||
|
||
-- 租户成员表
|
||
tenant_members:
|
||
- id, tenant_id, user_id, email
|
||
- role, permissions
|
||
- status (pending/active)
|
||
|
||
-- 租户资源使用统计表
|
||
tenant_usage:
|
||
- id, tenant_id, date
|
||
- storage_bytes, transcription_seconds
|
||
- api_calls, projects_count
|
||
```
|
||
|
||
### API 端点
|
||
|
||
#### 租户管理
|
||
- `POST /api/v1/tenants` - 创建租户
|
||
- `GET /api/v1/tenants` - 列出租户
|
||
- `GET /api/v1/tenants/{id}` - 获取租户详情
|
||
- `PUT /api/v1/tenants/{id}` - 更新租户
|
||
- `DELETE /api/v1/tenants/{id}` - 删除租户
|
||
|
||
#### 域名管理
|
||
- `POST /api/v1/tenants/{id}/domains` - 添加域名
|
||
- `GET /api/v1/tenants/{id}/domains` - 列出域名
|
||
- `POST /api/v1/tenants/{id}/domains/{id}/verify` - 验证域名
|
||
- `DELETE /api/v1/tenants/{id}/domains/{id}` - 移除域名
|
||
|
||
#### 品牌配置
|
||
- `GET /api/v1/tenants/{id}/branding` - 获取品牌配置
|
||
- `PUT /api/v1/tenants/{id}/branding` - 更新品牌配置
|
||
- `GET /api/v1/tenants/{id}/branding.css` - 获取品牌 CSS(公开)
|
||
|
||
#### 成员管理
|
||
- `POST /api/v1/tenants/{id}/members` - 邀请成员
|
||
- `GET /api/v1/tenants/{id}/members` - 列出成员
|
||
- `PUT /api/v1/tenants/{id}/members/{id}` - 更新成员角色
|
||
- `DELETE /api/v1/tenants/{id}/members/{id}` - 移除成员
|
||
|
||
#### 使用统计
|
||
- `GET /api/v1/tenants/{id}/usage` - 获取使用统计
|
||
- `GET /api/v1/tenants/{id}/limits/{type}` - 检查资源限制
|
||
|
||
#### 域名解析
|
||
- `GET /api/v1/resolve-tenant?domain={domain}` - 通过域名解析租户
|
||
|
||
## 资源限制配置
|
||
|
||
### Free 层级
|
||
- 最大项目数: 3
|
||
- 存储空间: 100MB
|
||
- 转录时长: 60分钟
|
||
- API 调用: 100次/天
|
||
- 团队成员: 2人
|
||
- 实体数: 100
|
||
|
||
### Pro 层级
|
||
- 最大项目数: 20
|
||
- 存储空间: 1GB
|
||
- 转录时长: 600分钟
|
||
- API 调用: 10,000次/天
|
||
- 团队成员: 10人
|
||
- 实体数: 1,000
|
||
|
||
### Enterprise 层级
|
||
- 所有资源无限制
|
||
|
||
## 测试
|
||
|
||
运行测试脚本:
|
||
```bash
|
||
cd backend
|
||
python3 test_phase8_task1.py
|
||
```
|
||
|
||
测试覆盖:
|
||
- ✅ 租户创建和管理
|
||
- ✅ 自定义域名绑定和验证
|
||
- ✅ 品牌白标配置
|
||
- ✅ 成员邀请和权限管理
|
||
- ✅ 资源使用统计
|
||
|
||
## 后续工作
|
||
|
||
1. **前端界面**: 租户管理面板、域名配置页面、品牌设置
|
||
2. **域名验证**: 实现真实的 DNS 查询和 HTTP 验证
|
||
3. **SSL 证书**: 集成 Let's Encrypt 自动签发证书
|
||
4. **邮件通知**: 成员邀请邮件、用量告警邮件
|
||
5. **订阅集成**: 与支付系统对接,自动升级/降级
|
||
|
||
## 文件清单
|
||
|
||
- `backend/tenant_manager.py` - 多租户管理模块 (51KB)
|
||
- `backend/schema.sql` - 数据库表结构更新
|
||
- `backend/main.py` - API 端点集成
|
||
- `backend/test_phase8_task1.py` - 测试脚本
|
||
|
||
## 总结
|
||
|
||
Phase 8 Task 1 成功实现了多租户 SaaS 架构的核心功能,为 InsightFlow 平台的商业化运营奠定了基础。租户隔离、自定义域名、品牌白标和权限管理等功能已完整实现并通过测试。 |