# 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 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 自动化写入的审计日志,确保卡密管理平台和数据库里不残留测试卡密数据。