portal-auth P4(#24 #25):admin 帳號+庫管理頁+last-admin 鎖死保護(不 merge,待總管審) (#53)

This commit was merged in pull request #53.
This commit is contained in:
Leo
2026-07-14 08:54:41 +00:00
parent 3577e9255c
commit 52dbd31dea
5 changed files with 784 additions and 8 deletions
+23 -3
View File
@@ -102,10 +102,30 @@
## P4 — admin 頁+工作流顯示(design §6)|觸碰:`cypher-executor/`
- [ ] 帳號管理頁(admin-only nav):列表/新增/停用/重設密碼+每帳號庫權限勾選
- [ ] 庫目錄管理(登記/停用庫)
- [ ] 工作流頁(唯讀 list+最近執行;`PORTAL_SHOW_WORKFLOWS` 預設 admin;不開 trigger
- [x] 帳號管理頁(admin-only nav):列表/新增/停用/重設密碼+每帳號庫權限勾選
- 實作註(2026-07-14):`portal-ui.ts` 加「管理」頁(v-adminnav 只對 role=admin 顯示,
真閘=/portal/admin/* role 閘 403)。新增未帶密碼 → server `generatePassword` 一次性
密碼**只在畫面顯示一次**(otpbox,關閉即逝;server 只存 hash);每帳號庫勾選含
`["*"]` 全庫選項(勾選連動停用個別庫框);可勾清單=庫目錄啟用中 ∪ general ∪ 該帳號
既有授權(目錄外舊授權不憑空消失)。admin API P2 已交付不重做;本波補
**last-admin 鎖死保護**(總管派工明定,design 未明寫——PATCH 停用/降級「最後一個
active admin」→ 409;只在目標是 active admin 且 patch 會使其失格時多打一次 list)。
- [x] 庫目錄管理(登記/停用庫)
- 同頁第二區:登記(name/display_name/description)+停用/啟用+ `graph_source`
圖譜來源標記(D-4,P3 已有 API,本波補 UI)。
- [x] 工作流頁(唯讀 list+最近執行;`PORTAL_SHOW_WORKFLOWS` 預設 admin;不開 trigger)
- **P3 已交付**`/portal/data/workflows` routev-workflows 頁+D-8 閘),P4 沿用零改動。
- **驗收**:admin 全流程「發帳號→授庫→同仁登入查詢→停用」在 UI 走通;一般用戶看不到 admin 頁與(預設下)工作流頁
- 單元:`tests/portal-admin.test.ts` 14 項(鎖死保護含「另一 admin 是 disabled 不算數」
「停用一般 user 不多打 list」;一次性密碼/reset 明碼不進 KBDB bodyHTML 殼加 admin 頁後
仍零租戶字串/零 /kbdb//零 API key/零 Mira)。cypher 全套 168/169(唯一失敗=executor
「不存在的零件」pre-existing);kbdb 20/20;兩包 tsc 0dry-run 打包過;inline JS
node --check 過(2 段)。
- 端到端:本機隔離雙 worker9790/9791demo 8787/8788 不碰)**41/41 全綠**——bootstrap→
admin 建帳號拿一次性密碼→新 user 登入→勾庫後**同一 session 搜尋範圍即時變化**(1 筆→2 筆、
越庫 404→200)→停用 session 立即失效→重設密碼舊密 401 新密 200→last-admin 409(含降級
即時生效:原 admin session 打 admin API 變 403)→一般 user 打 admin API 403。
- leo21c 線上面=部署後驗(gated wrangler 直推,B 類流程)。
- **工程量**:中(約 1 個 CC 工作天)
---