# dclaw-admin
**Repository Path**: longmore/dclaw-admin
## Basic Information
- **Project Name**: dclaw-admin
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-31
- **Last Updated**: 2026-05-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## uni-admin
uni-admin,是基于 uni-app 和 uniCloud 的管理后台项目模版。
对于uniCloud的开发者而言,其后台管理系统应该使用本框架。
我们搭建了[uni-admin演示站点](http://hellouniadmin.dcloud.net.cn/admin/),你登录后即可快速体验uni-admin。
uni-admin 是开源的,遵循 MIT 协议,你可以从[Github](https://github.com/dcloudio/uni-admin)或[码云](https://gitee.com/dcloud/uni-admin)获取源码,也可以从[DCloud插件市场](https://ext.dcloud.net.cn/plugin?id=3268)快捷下载。
## 框架特征
- 基于 uni-app 的宽屏适配,可自动适配 PC 宽屏和手机各端。了解[宽屏适配](https://uniapp.dcloud.io/adapt)
- 基于 uniCloud,是 serverless 的云开发。了解[uniCloud](https://uniapp.dcloud.io/uniCloud/README)
- 基于 uni-id,使用 uni-id 的用户账户、角色、权限系统。了解[uni-id](https://uniapp.dcloud.io/uniCloud/uni-id)
## 看视频,15分钟掌握uni-admin
## DClaw 卡密系统部署说明
当前仓库已新增一套用于 `dddclaw` 桌面端的卡密授权能力,包含:
- 公共云函数 `dclaw-license-public`
- 后台云对象 `dclaw-license-admin`
- E2E 临时卡密云函数 `dclaw-license-e2e`(默认关闭,仅测试环境启用)
- 通用模块 `common/dclaw-license-common`
- 数据集合 `dclaw-license-records`、`dclaw-license-code-states`、`dclaw-license-activations`、`dclaw-license-audit-logs`、`dclaw-license-rate-limits`
- 后台主页面 `/pages/system/license/list`(`detail` / `activations` 页面仅保留兼容跳转)
说明:
- 卡密明文不会整批落库,而是根据 `record_token + seq_no + HMAC` 算法即时生成。
- 当前版本已在 `common/dclaw-license-common` 内固定内置单一签名密钥,不依赖 uniCloud 环境变量。
### 部署建议
- 先导入 `uniCloud-aliyun/database` 下新增的 schema、index 和 init data。
- 再上传 `dclaw-license-public`、`dclaw-license-admin`、`dclaw-license-e2e` 以及 `common/dclaw-license-common`。
- 确保后台管理员账号带有 `admin` 角色,否则无法调用授权管理云对象。
- 公共云函数会对 `IP / 安装实例 / 卡密 / activationId` 做限流,并统一返回泛化错误文案,用于降低暴力破解和枚举攻击风险。
### E2E 临时卡密接口
`dclaw-license-e2e` 只用于桌面端真实 E2E 测试自动准备卡密。它默认不可用,必须在测试云空间显式配置:
- `DCLAW_LICENSE_E2E_ENABLED=1`
- `DCLAW_LICENSE_E2E_TOKEN=<足够长的随机令牌>`
不要在生产云空间启用该接口。E2E 调用时需要在请求体 `params.token`、`x-dclaw-e2e-token` 请求头或 `Authorization: Bearer ...` 中传入同一个令牌。
创建测试卡密:
```powershell
$body = @{
action = 'createLicenseBundle'
params = @{
token = $env:DCLAW_LICENSE_E2E_TOKEN
runId = "local-$([DateTimeOffset]::UtcNow.ToUnixTimeSeconds())"
codesPerType = 8
utilityCount = 24
}
} | ConvertTo-Json -Depth 5
Invoke-RestMethod -Method Post -Uri 'https://<你的云函数地址>/dclaw-license-e2e' -ContentType 'application/json' -Body $body
```
返回结果会包含 `trial6h`、`monthly`、`quarterly`、`yearly`、`lifetime` 五类有效卡密。桌面端授权 E2E 只暴露两个入口:`auth` 跑 5 类卡密矩阵,`license-lifecycle` 从 `trial6h` 体验卡池取一张卡,先真实激活使用,再通过 `setLicenseExpiry` 动作调整已激活状态的 `valid_until`,用于验证临近过期和过期后的桌面端提示。`codesPerType` 用于给每种卡类型生成多张专项卡,`utilityCount` 仅保留给旧的默认临时卡池用法。返回的 `DCLAW_E2E_LICENSE_CODE_POOL_TRIAL_6H` 会供生命周期用例逐个消耗,避免同一张卡密被不同安装实例重复激活。测试结束后必须按 `runId` 或 `recordIds` 清理;如果上一次测试异常中断,也可以传入 `includeStale=true` 顺手清理历史 E2E 临时批次:
```powershell
$body = @{
action = 'setLicenseExpiry'
params = @{
token = $env:DCLAW_LICENSE_E2E_TOKEN
code = ''
scope = 'record' # record 表示激活前调整卡密记录;activation 表示激活后调整已使用卡密
validUntilOffsetMs = -60000
}
} | ConvertTo-Json -Depth 5
Invoke-RestMethod -Method Post -Uri 'https://<你的云函数地址>/dclaw-license-e2e' -ContentType 'application/json' -Body $body
```
```powershell
$body = @{
action = 'deleteLicenseBundle'
params = @{
token = $env:DCLAW_LICENSE_E2E_TOKEN
runId = ''
includeStale = $true
createdBefore = (Get-Date).ToUniversalTime().ToString('o')
}
} | ConvertTo-Json -Depth 5
Invoke-RestMethod -Method Post -Uri 'https://<你的云函数地址>/dclaw-license-e2e' -ContentType 'application/json' -Body $body
```
清理逻辑只会删除 `created_by_uid=e2e-license-provisioner` 且备注以 `E2E临时卡密:` 开头的记录,避免误删正式卡密。删除时会同步移除 `dclaw-license-records`、`dclaw-license-code-states`、`dclaw-license-activations` 和 E2E 自动化写入的审计日志,确保卡密管理平台和数据库里不残留测试卡密数据。