# ECR-013A **Title:** Admin RBAC(角色 · 权限点 · API 强制鉴权) **Status:** **Closed** **Date:** 2026-08-07 **Approved:** 2026-08-07(Human) **Coding Start Authorization:** 2026-08-07(Human) **Closed:** 2026-08-07(Reviewer Approve) **Parent:** WAVE0-FROZEN (`27f27a1`) **Change Level: L2**(行为:管理员授权模型;栈与分层不变) ## Change 1. Active Feature Spec:`.ai/product/feature-spec/ops-rbac.md` 2. Domain:`AdminRole` · `AdminPermission`;`AdminAccount.role_id` 3. API 意图:`GET/PUT /api/v1/admin/roles*` · 扩展 `GET /me` permissions 4. 既有 admin 写路径挂 permission;缺权 403 + AuditLog 5. **contract_diff**:`docs/CONTRACT_DIFF/ECR-013A.yaml`(P0) 6. **不含** UserStatus / 账户启停(ECR-013B) ## Motivation Ops-A 管理员权限扁平;进入多运营角色与 M1+ 前必须有可审计的最小权限模型。 ## Scope ### Allowed - 上列 Spec / Domain / API 意图 / BD Draft / AC(四类) - feature-map §7 · TRACEABILITY · STATE · TASK(architect) ### Forbidden(Non-goals) - ECR-013B AccountLifecycle(另 Start Authorization) - 真支付 · UGC · Prompt · 兑换码 · Crisis · 完整角色编辑 UI(本切片 API-first + me 最小展示) ## Risk | Risk | Mitigation | |------|------------| | 锁死全部管理员 | 种子 `super_admin` 不可删;bootstrap 保留 | | 权限码膨胀 | 本切片冻结 catalog;新增须新 ECR | | 与 Ops-B/C 路由遗漏挂权 | ENGINEERING_SPEC 列清单;integration 覆盖 grant/content | ## Acceptance Criteria 见 Spec `ops-rbac.md` L4:AC-F-01..03 · AC-S-01..04 · AC-P-01 · AC-O-01..02(实现轮勾选) 契约 / 实现完成标准: - [x] L0–L4 填满 - [x] contract_diff 已交 - [x] BD Draft + HANDOFF - [x] Human **Approve** ECR+BD + Coding Start Authorization - [x] Migration + middleware + roles API + TEST_REPORT - [x] Reviewer Approve → **Closed** ## Rollback - down migration `000015` + 回退 permission middleware ## Risk Review - Path: N/A ## Linked - Feature Spec: `.ai/product/feature-spec/ops-rbac.md` - PRODUCT_SPEC: `docs/PRODUCT_SPEC/ECR-013A-admin-rbac.md` - ENGINEERING_SPEC: `docs/ENGINEERING_SPEC/ECR-013A-admin-rbac.md` - BACKEND_DESIGN: `docs/BACKEND_DESIGN/BD-2026-013A-admin-rbac.md` - CONTRACT_DIFF: `docs/CONTRACT_DIFF/ECR-013A.yaml` - TEST_REPORT: `docs/TEST_REPORT/ECR-013A.md` - CODE_REVIEW: `docs/CODE_REVIEW/ECR-013A.md` - Parent: WAVE0-FROZEN