Files
ssq-desk/docs/04-功能迭代/授权码功能/授权码功能设计.md
2026-01-14 14:17:38 +08:00

115 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 授权码功能设计
## 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, -- 设备IDMD5哈希
`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