后端:User.is_platform_admin + migration;权限类 IsPlatformAdmin;管理命令建 admin/admin123(幂等); AdminAuditLog 模型 + log_admin_action() helper;me/login 对无团队超管优雅返回 team=null;UserSerializer 暴露标志。 前端:routes/admin 后台外壳(分组侧栏 + 概览 + 占位)、/admin 路由解析与 gating(超管直落、非超管纠回)、 侧栏平台入口、admin-page.css(仅 token)、IconKitSvg 补图标。 测试:accounts 11/11 单测过;无头 e2e _admin-p0.mjs 全断言过 + 0 console error;tsc+build 绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
平台 Admin 后台 + 注册邀请码 · 落地进度
计划:
C:/Users/Air-work/.claude/plans/gleaming-sleeping-ullman.md(Phase 0–9 全做)。 每个 Phase 走完「★测试底座」(后端单测 + 无头浏览器 e2e + tsc/build + 回归)才 commit。 全程本地、不 push;测试服 DB 可动。
测试基线(回归红线)
apps.accounts / apps.billing / apps.products:全绿(Phase 0 后 15/15 OK)。apps.projects:进 Phase 0 前已有 3 failures + 1 error(均为 AI providerimage_editmock 相关,与本工程无关)——非本次引入,Phase 0 改动仅在 accounts + 前端,未触碰 projects/ai。后续 Phase 不得新增 fail。
✅ Phase 0 · 基础(角色 + 壳 + 审计)— 完成 2026-06-19
后端
User.is_platform_admin(bool)+ migration0004_user_is_platform_admin_adminauditlog(已 apply 到测试 MySQL)。apps/accounts/permissions.py·IsPlatformAdmin(超管放行 / 普通拒 / 停用拒)。apps/accounts/management/commands/create_platform_admin.py· 建 admin/admin123(幂等;--reset-password才重置;也置is_staff)。已对测试 MySQL 执行,真账号可登。AdminAuditLog模型(operator/operator_name/action/target_*/before/after/ip)+apps/accounts/audit.pylog_admin_action()(失败不阻断主流程)。me/login对无团队的平台超管优雅返回team=null(新增current_team_or_none);UserSerializer暴露is_platform_admin。
前端
- 新
routes/admin/admin-app.tsx:超管后台外壳(折叠分组侧栏 6 组 11 项 + 顶栏 + 概览 + 占位页),全程复用 restraint 共享类。 - 路由:
route-config.ts解析/admin、/admin/<section>;App.tsx分流渲染AdminApp+ gating(超管无团队登录直落 /admin、非超管访问 /admin 纠回工作台)。 app-shell.tsx侧栏「平台」入口(仅超管可见)。admin-page.css(仅 token,无裸 hex)+IconKitSvg补 8 个 Lucide-line 图标。
测试底座(全过)
- 后端单测:
apps.accounts11/11 OK(新增PlatformAdminTests:建超管命令幂等/权限类放行拒绝/登录+me 返回标志且 team 为空/普通注册非超管)。 - 无头 e2e:
core/qa/visual-parity/_admin-p0.mjs—— 全部断言通过 + 0 console error:- admin/admin123 真登录 → 落 /admin;
- 超管壳:6 分组 / 11 导航 /
[ PLATFORM ADMIN ]徽标 / 概览标题 / 点「邀请码」→ /admin/invites 占位「模块即将上线」; - 普通用户访问 /admin → 纠回 /dashboard、admin 壳不渲染。
- 截图:
output/admin/p0-*.png。
- 类型/构建:
tsc --noEmit+npm run build全绿。 - 视觉:概览截图核对 —— 冷灰底 + 单橙 accent + 8px 圆角 + 准星,符合 design.md 克制调性。
测试账号:平台超管 admin/admin123(测试 MySQL 已建);普通 demo airshelf/Restraint2026。