115 lines
3.3 KiB
Markdown
115 lines
3.3 KiB
Markdown
# 授权码功能设计
|
||
|
||
## 1. 功能概述
|
||
|
||
授权码功能用于设备激活和授权验证,确保应用在授权设备上使用。
|
||
|
||
## 2. 核心功能
|
||
|
||
### 2.1 设备标识
|
||
- 基于主机名、用户目录、操作系统生成设备ID
|
||
- 使用 MD5 哈希确保唯一性和稳定性
|
||
- 设备ID与授权码绑定
|
||
|
||
### 2.2 授权码验证
|
||
- 授权码输入和格式验证
|
||
- 设备绑定(授权码与设备ID关联)
|
||
- 授权状态存储(SQLite 本地数据库)
|
||
|
||
### 2.3 激活验证
|
||
- 应用启动时自动验证授权状态
|
||
- 授权信息展示
|
||
- 授权失效处理
|
||
|
||
## 3. 数据模型
|
||
|
||
### 3.1 Authorization 表结构
|
||
|
||
```sql
|
||
CREATE TABLE IF NOT EXISTS `sys_authorization_code` (
|
||
`id` INTEGER PRIMARY KEY AUTOINCREMENT, -- 主键ID
|
||
`license_code` VARCHAR(100) NOT NULL, -- 授权码(唯一)
|
||
`device_id` VARCHAR(100) NOT NULL, -- 设备ID(MD5哈希)
|
||
`activated_at` DATETIME NOT NULL, -- 激活时间
|
||
`expires_at` DATETIME NULL, -- 过期时间(可选,NULL表示永不过期)
|
||
`status` TINYINT NOT NULL DEFAULT 1, -- 状态(1:有效 0:无效)
|
||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
|
||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 更新时间
|
||
UNIQUE (`license_code`) -- 授权码唯一索引
|
||
);
|
||
```
|
||
|
||
### 3.2 字段说明
|
||
- `id`: 主键ID,自增
|
||
- `license_code`: 授权码,唯一索引(UNIQUE约束)
|
||
- `device_id`: 设备ID(基于主机名、用户目录、操作系统生成的MD5哈希),通过 GORM 标签定义索引
|
||
- `activated_at`: 激活时间,必填
|
||
- `expires_at`: 过期时间,可选,NULL表示永不过期
|
||
- `status`: 状态(1:有效 0:无效),默认值为1
|
||
- `created_at`: 创建时间,自动设置为当前时间
|
||
- `updated_at`: 更新时间,自动更新为当前时间
|
||
|
||
### 3.3 索引说明
|
||
- `license_code`: 唯一索引(UNIQUE约束),用于快速查找和验证授权码
|
||
- 其他字段的索引通过 GORM 标签在模型定义中声明,由 GORM AutoMigrate 自动创建
|
||
|
||
## 4. API 接口
|
||
|
||
### 4.1 ActivateLicense
|
||
- **功能**: 激活授权码
|
||
- **参数**: `licenseCode string`
|
||
- **返回**: 激活结果和授权状态
|
||
|
||
### 4.2 GetAuthStatus
|
||
- **功能**: 获取当前授权状态
|
||
- **返回**: 授权状态信息
|
||
|
||
### 4.3 GetDeviceID
|
||
- **功能**: 获取设备ID
|
||
- **返回**: 设备ID字符串
|
||
|
||
## 5. 实现架构
|
||
|
||
### 5.1 分层结构
|
||
```
|
||
API 层 (auth_api.go)
|
||
↓
|
||
Service 层 (auth_service.go)
|
||
↓
|
||
Repository 层 (auth_repository.go)
|
||
↓
|
||
Model 层 (authorization.go)
|
||
↓
|
||
SQLite 数据库
|
||
```
|
||
|
||
### 5.2 启动验证流程
|
||
```
|
||
应用启动
|
||
↓
|
||
初始化 SQLite
|
||
↓
|
||
初始化 AuthAPI
|
||
↓
|
||
检查授权状态
|
||
↓
|
||
未激活 → 提示用户激活
|
||
已激活 → 继续运行
|
||
```
|
||
|
||
## 6. 使用说明
|
||
|
||
### 6.1 激活授权
|
||
前端调用 `ActivateLicense(licenseCode)` 方法激活授权码。
|
||
|
||
### 6.2 检查状态
|
||
前端调用 `GetAuthStatus()` 方法获取授权状态,根据状态决定是否显示激活界面。
|
||
|
||
### 6.3 设备ID
|
||
调用 `GetDeviceID()` 获取设备ID,可用于授权码生成或问题排查。
|
||
|
||
---
|
||
|
||
> 文档维护者:JueChen
|
||
> 创建时间:2026-01-07
|