user-limit-panel

20260916-201504 轮 · 看它的历史
  ✅ harness 自检:键都算得出来且形态对
       K_DAY=email_daily_1_b8d2da5acfaab41be923df3b3b88b483_20260916
       BOT_XTR=rlx_email_daily_1_e9def9cd3118078cc11909d191c7cc16

=== A · 打满真实发码链 → 面板必须显示满 ===
  ✅ A1 前置:连发 5 次都成功(限流链没被改坏)
       {"data":"\u9a8c\u8bc1\u7801\u5df2\u53d1\u9001\uff0c\u8bf7\u67e5\u6536\u90ae\u7bb1","info":"1","status":1}
  ✅ A2 日限计数确实累加到上限
       实际 5
  ✅ A3 第 N+1 次被拒(日限生效),且文案是"已达上限"
       该邮箱今日获取验证码次数已达上限
  ✅ A4 前置:找回密码链把日限记到 3(产品写的,不是测试塞的)
       实际 "3"
  ✅ A5 面板里有这一行
  ✅ A6 🔴 面板显示 3 / 20 —— 读的与产品写的是**同一个桶**(显示 0 就说明两边的键分叉了)
       实际 "3 / 20"
  ✅ A7 撞上限的行被标红并写明「已达上限」
       注册验证码 · 按邮箱每日上限(已达上限)

=== B · 加额 → 恰好多放行 N 次,且今日已用继续累加 ===
  ✅ B0 加额端点返回成功
  ✅ B1 面板「额外次数」显示 3
       实际 "3"
  ✅ B2 🔴 加额 3 → 恰好多放行 3 次(第 4 次起仍被拒)
       实际放行 3 次
  ✅ B3 🔴 溢出语义:命中加额时计数照样 +1(今日已用 = 8,不是停在 5)
       实际 8
  ✅ B4 加额被扣光

=== C · 换一天:计数归零,加额还在 ===
  ✅ C1 前置:明天的计数键与今天不同
       email_daily_1_e9def9cd3118078cc11909d191c7cc16_20260916
       email_daily_1_e9def9cd3118078cc11909d191c7cc16_20260917
  ✅ C2 明天那个计数桶是空的(日限按天重置)
  ✅ C3 🔴 加额键里没有日期段,明天照样读得到(= 不随时间重置)
  ✅ C4 填 0 = 撤销

=== D · 登录失败计数:面板显示 → 清零 ===
  ✅ D1 前置:isLoginBlocked 现在确实拦着(闸与面板读的是同一个桶)
  ✅ D2 面板显示 20 / 20
       实际 "20 / 20"
  ✅ D3 失败计数型给的是「清除」不是「加次数」
       clear=true grant=false
  ✅ D4 清除端点返回成功
  ✅ D5 🔴 清完之后 isLoginBlocked 真的放行了(清的是对的键)

=== E · 硬顶 / 不可加额 / 越权 / method 闸 ===
  ✅ E1 🔴 硬顶:n=100000 被拒
  ✅ E2 🔴 实名失败闸单独封顶 3
  ✅ E3 🔴 全站短信桶拒绝加额(它不属于任何会员)
  ✅ E4 🔴 管理员二级 PIN 桶拒绝清零(越权面)
  ✅ E5 🔴 拿超管 uid(1) 打清零 → 必须拒(vip<9 闸)
  ✅ E6 🔴 纯 GET 被 method 闸拒(一个 <img> 不能清限流)

=== F · 实名两行要位 67(服务端那道才是承重的)===
  ✅ F1 只有位 42 时:实名行仍然看得见(不隐藏,否则管理员以为没有这道闸)
  ✅ F2 只有位 42 时:实名行**没有**加额控件
  ✅ F3 并写明需要什么权限
       需要「AI 与实名」权限才能调整
  ✅ F4 守卫:非实名行不受影响,仍可加额
  ✅ F5 🔴 直接打端点也被拒(只在模板里判等于没判)

=== G · 没有位 42 → 页面与端点都拒 ===
  ✅ G1 详情页被拒
  ✅ G2 加额端点被拒

=== H · 三组 op_code 都落了库 ===
  ✅ H·user_limit_view 有记录
       实际 482 条
  ✅ H·user_limit_grant 有记录
       实际 30 条
  ✅ H·user_limit_clear 有记录
       实际 54 条
  ✅ H4 🔴 限流命中也落了审计(P0 那条链)
  ✅ H5 🔴 grant 的 detail 记了 code 与数值,且**不含**邮箱/手机号明文
       {"code":"email_daily","granted":3,"used_at_grant":5,"max":5}

=== I · 操作记录页 → 直达使用限制面板 ===
  ✅ I1 前置:页面确实列出了限流命中的行
  ✅ I2 🔴 会员那条给出直达链接(id/990863)
  ✅ I3 🔴 只有邮箱、还没有会员记录的那条:**不给链接**,改为提示按邮箱检索

[还原] e2e_admin10.userauth = [12,2,66,65,3]  ✔

PASS=43 FAIL=0