portal-auth P4 收尾:tasks.md 全 [x]+wiki status P4 段(SDD P1-P4 全完成,待 T6-cloud 排練)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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-admin,nav 只對 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` route+v-workflows 頁+D-8 閘),P4 沿用零改動。
|
||||
- **驗收**:admin 全流程「發帳號→授庫→同仁登入查詢→停用」在 UI 走通;一般用戶看不到 admin 頁與(預設下)工作流頁
|
||||
- 單元:`tests/portal-admin.test.ts` 14 項(鎖死保護含「另一 admin 是 disabled 不算數」
|
||||
「停用一般 user 不多打 list」;一次性密碼/reset 明碼不進 KBDB body;HTML 殼加 admin 頁後
|
||||
仍零租戶字串/零 /kbdb//零 API key/零 Mira)。cypher 全套 168/169(唯一失敗=executor
|
||||
「不存在的零件」pre-existing);kbdb 20/20;兩包 tsc 0;dry-run 打包過;inline JS
|
||||
node --check 過(2 段)。
|
||||
- 端到端:本機隔離雙 worker(9790/9791,demo 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 工作天)
|
||||
|
||||
---
|
||||
|
||||
@@ -15,7 +15,25 @@ metadata:
|
||||
|
||||
## 📍 當前位置
|
||||
|
||||
> **2026-07-14 本 session(portal-auth P3:Portal UI+查詢 enforce——本 SDD 最大件,PR 待總管審不 merge)**:
|
||||
> **2026-07-14 本 session(portal-auth P4:admin 帳號+庫管理頁——本 SDD 最後一棒,PR 待總管審不 merge)**:
|
||||
> - **實作(分支 `portal-auth-p4-admin-ui`,3+1 小步 commit)**:① `portal.ts` 補 **last-admin
|
||||
> 鎖死保護**(總管派工明定、design 未明寫)——PATCH 停用/降級「最後一個 active admin」→ 409
|
||||
> (另一 admin 是 disabled 不算數;只在目標是 active admin 且會失格時才多打一次 list,平時零成本)。
|
||||
> admin API 其餘 P2 已交付(users CRUD/reset-password/libraries 含 graph_source)**不重做**。
|
||||
> ② `portal-ui.ts` 加「管理」頁(admin-only nav,前端藏=UX、真閘=/portal/admin/* role 403):
|
||||
> 帳號管理(列表/新增/停用啟用/重設密碼+每帳號勾選可查庫含 `["*"]` 全庫連動)+庫目錄管理
|
||||
> (登記/停用/graph_source 標記)。**一次性密碼只在畫面顯示一次**(otpbox 關閉即逝,server 只存
|
||||
> hash、明碼不落庫不進 log)。③ 工作流頁 P4 項=P3 已交付,零改動沿用。
|
||||
> - **驗證**:新增 `tests/portal-admin.test.ts` 14 項;cypher 168/169(唯一失敗=executor「不存在的
|
||||
> 零件」pre-existing);kbdb 20/20;兩包 tsc 0;dry-run 打包過;inline JS node --check 過。
|
||||
> **端到端隔離雙 worker(9790/9791,demo 8787/8788 不碰)41/41 全綠**:bootstrap→建帳號拿一次性
|
||||
> 密碼→新 user 登入→勾庫**同一 session 搜尋即時變化**(1→2 筆、越庫 404→200)→停用 session 立即
|
||||
> 失效→重設密碼舊密 401 新密 200→last-admin 409+降級即時生效(原 admin session 變 403)→一般
|
||||
> user 打 admin API 403→HTML 殼加 admin 頁後仍零租戶字串/零 /kbdb//零 API key/零 Mira。
|
||||
> - **portal-auth SDD P1-P4 全完成,待 T6-cloud 排練上真環境**(部署清單沿 P1:Vectorize `library`
|
||||
> metadata index+reindex backfill;gated leo21c wrangler 直推,B 類流程)。不 merge 待總管審。
|
||||
>
|
||||
> **2026-07-14 上一輪(portal-auth P3:Portal UI+查詢 enforce——本 SDD 最大件,PR #52 待總管審不 merge)**:
|
||||
> - **實作(分支 `portal-auth-p3-portal-ui`)**:① `routes/portal-data.ts`(安全核心)——`/portal/data/*`
|
||||
> server-side enforce:session→回讀 user record→server 注入 `owner_id=CONSOLE_TENANT`+`library=<集合>`
|
||||
> 轉發 KBDB;**前端絕不下發租戶字串**(vs console 把 tenant 交給前端直打 /kbdb/*);caller 自帶
|
||||
|
||||
Reference in New Issue
Block a user