chore(tenant): 租户域名改为默认关闭(客户决定先不做)—— 能力保留,关得干净

客户:先不做多租户了。

处理:fill.tenant-domain.enabled 默认 true → **false**,代码全部保留。
理由:
  · 这个能力是隔离的:关掉后 TenantDomainResolver 一律返回 null,
    登录走老路径、AuthInterceptor 那段校验根本不触发 —— 不影响任何既有行为
  · 它已经验过(§一·二十五 16/16),删掉等于扔掉一份验过、将来要用的东西
  · 要真用上它,前提是有正式域名 + 泛域名解析 + 泛域名证书;这些没定之前
    开它只会让人以为"域名能区分单位了",实际并不能。等定了改一个配置 + 重启即可。

「关得干净」是本轮的验收点:E2E 改成**两种模式都能跑**,按当前模式选断言。
现在跑的是关闭态这一节(6 条):
  ✓ t1.localhost + 不填租户码 → 40012(域名不参与判断)
  ✓ 同一域名 + 填租户码 → 照样能登;主域名 + 租户码 → 照样能登
  ✓ 主域名 + 不填租户码 → 仍是 40012(跨单位重名的原行为)
  ✓ 关掉之后不引入任何新校验:带 t1 的 token 访问 t14 域名照常通过
脚本自己探测模式(免租户码登录成功=开、40012=关),所以开着时跑它会跑那 16 条,
不会因为模式不对而假绿。

将来开启:填 base → 配泛域名解析+证书 → XT_TENANT_DOMAIN_ENABLED=true → 重启 → 跑 E2E。
两条硬约束不变:微信授权回调域名只能配一个(回调统一落主域名再按 scene 跳回)、
小程序域名固定白名单(小程序端永远靠 scene)。

随之暂缓:§一·二十五 的三条待拍板(正式域名 / 手填租户码 / 小程序确认)现在都不用追了;
PRD 与 03-接口设计的补文档也等真要做时再写(现在写进去只会多一条"设计了但没启用")。

全量 666 条断言、0 失败(租户域名 16 → 6,因为跑的是关闭态那节)。
This commit is contained in:
2026-09-29 21:42:00 +08:00
parent 5b2f2c109d
commit e6cd1049d4
3 changed files with 138 additions and 6 deletions
@@ -138,14 +138,20 @@ fill:
# 代码里还会再判一次 profile 不含 prod(双保险)。
stub-enabled: ${WX_H5_STUB:true}
# ── 租户域名(用子域前缀区分租户)──────────────────────────────────────
# ── 租户域名(用子域前缀区分租户)—— 客户 2026-09-29 决定**先不做**,默认关闭 ──
#
# 形态:t{tenantId}.{base},如 t1.example.com / t2.example.com。
# 前缀用的是 **tenantId**,与扫码 scene 的 t{tid} 是同一套约定(scene 早就是 t1-k17)。
#
# ⚠️ **默认关闭**:单域名部署是合法形态,而且这个能力要真正用上,
# 前提是**有正式域名 + 泛域名解析 + 泛域名证书**(`*.example.com`)——
# 这些没定之前开它只会让人以为"域名能区分单位了",实际并不能。
# 客户说先不做,所以这里是 false;**能力本身保留且已验过**
# (e2e-m1-tenant-domain.py 16/16,见 §一·二十五),
# 将来只需:填 base、配泛域名证书、把这里改成 true、重启。
#
# 打开之后:
# · PC 登录在 t1.xxx.com 上**不用再填租户码** —— 域名已经回答了"你是哪个单位的",
# 那句「该账号存在于多个单位,请填写租户码」在这条路径下不会再出现
# · PC 登录在 t1.xxx.com 上**不用再填租户码** —— 域名已经回答了"你是哪个单位的"
# · H5 微信授权回调仍落在主域名(微信的"授权回调页面域名"只能配一个),
# 回调再按 scene 里的 t{tid} 跳回该单位的站点
#
@@ -154,9 +160,8 @@ fill:
# 就能读 t2 的数据,而界面看起来一切正常。
# ⚠️ 小程序端**用不了它**:微信的 request 合法域名是固定白名单,配不了 *.xxx.com,
# 所以小程序继续靠 scene 里的 t{tid}。
# ⚠️ 生产要配**泛域名解析 + 泛域名证书**(*.example.com)。
tenant-domain:
enabled: ${XT_TENANT_DOMAIN_ENABLED:true}
enabled: ${XT_TENANT_DOMAIN_ENABLED:false}
base: ${XT_TENANT_DOMAIN_BASE:localhost}
scheme: ${XT_TENANT_DOMAIN_SCHEME:http}