4.3 KiB
4.3 KiB
目标
在后台「AKSRT → 功能&权限 → 下载配置」中新增总开关 enabled(switch,默认开启)。开启 = 现有本站 token 中转下载(/download/{token},别名/次数/有效期生效);关闭 = 直连模式,下载按钮直接渲染原始下载地址,不再生成本站中转链接。权限门控保留(未登录/未购买/非会员仍显示解锁提示,已确认)。不写迁移、不留死代码、不做真实视觉效果验收。
现状(调研结论)
- 「下载配置」是 SPA 通用 schema 页(
SchemaPage.vue),PHP schema 在src/Admin/Schema/SchemaPermissions.php:73-85(optionaksrt_download_config),前端镜像在assets/admin/src/schema/sections/permissions/index.js:246-269 - 下载链路:按钮
data-action="aksrt-download"→POST /aksrt/v1/download/request(src/Content/Download.php:215)签发 token → 返回home_url('/别名/{token}')→ rewrite +maybe_serve_download()中转(本地流式/302 外链) - 发现死代码:
rest_policy()+/download/policy路由(全库无调用方)、aksrt_is_download_alone_page_enabled()(inc/helpers/aksrt-pay.php:921,无调用方)
变更清单
1. src/Admin/Schema/SchemaPermissions.php(PHP 权威 schema)
- download section version 1.0.0 → 1.1.0
- groups 重构(仿 login/moderation 模式):新
basic组「下载总开关」,字段enabled(switch,default true,help 说明「关闭后下载采用直连,下方链接规则不生效」);原url_alias/default_max_uses/ttl_minutes移入rules组「链接规则」,各加dependsOn: {key: 'enabled', value: true}
2. assets/admin/src/schema/sections/permissions/index.js(前端镜像)
download.defaults增加enabled: true;groups 同步 PHP 双组结构(switch + dependsOn);更新 description
3. src/Content/Download.php
- 新增
public function is_enabled(): bool:读aksrt_download_config,enabled键缺失视为开启(默认 true),否则!empty()判定(与 PostDisplay 等现有默认 true 惯用法一致) - 关闭时提前 return:
register_rewrite()(不注册路由)、register_routes()(不注册/download/request)、maybe_serve_download()(旧 token 链接失效,含?aksrt_dl_token=直查) - 删除死代码:
rest_policy()方法与/download/policy路由注册 - token 签发/流式输出等开启路径逻辑不动(现有契约测试正则不受影响)
4. templates/parts/resource-download-box.php
- 顶部计算
$direct_download(class_exists守卫 +is_enabled()取反) - 下载源循环:直连模式且非 need_login 时,渲染
<a href="{原始url}" target="_blank" rel="nofollow noopener">(保留网盘识别徽章/着色),提取码旁复用全局 clipboard 委托渲染复制按钮(data-clipboard-text,main.min.js 已全局处理);need_login 分支不变 - 直连模式下
$captcha_active置 false(验证码容器成死 UI) - 独立下载页入口(
down_alone_page)是独立功能,不与本开关耦合
5. inc/helpers/aksrt-pay.php
aksrt_get_paid_download_actions_html():直连模式渲染<a class="but ...">直链替代 token 按钮;提取码/复制按钮逻辑不变- 删除死代码
aksrt_is_download_alone_page_enabled()
6. tests/widget-system/download-config-contract.test.cjs(扩展契约测试)
- 字段对齐测试加入
enabled => true(PHP)/enabled: true(JS) - 新增断言:Download.php 含
is_enabled守卫;/download/policy已移除;直连模式下盒模板与付费卡函数含直链<a>渲染分支
行为语义(写入代码注释与测试预期)
- 默认开启,存量站点零感知(不迁移 option,键缺失即 true)
- 关闭后:无下载计次、无免费额度扣减、无下载就绪通知、无验证码——直连语义的自然结果
- 关闭后旧
/download/{token}链接全部失效
验证
php -l检查所有改动的 PHP 文件node --test tests/widget-system/download-config-contract.test.cjs,并跑 pay-card-contract、post-visual-contract 确认无回归cd assets/admin && npm run build重建 SPA(前端 schema 变更需构建生效);若assets/admin/build/被 git 跟踪则一并纳入变更- 按要求跳过真实视觉效果验收