From fd94340eba9fbbf065a64f33f393b75fb51bdd9c Mon Sep 17 00:00:00 2001 From: uncle6me-web Date: Tue, 14 Jul 2026 15:38:46 +0800 Subject: [PATCH] =?UTF-8?q?portal-auth=20P4=20=E6=94=B6=E5=B0=BE=EF=BC=9At?= =?UTF-8?q?asks.md=20=E5=85=A8=20[x]=EF=BC=8Bwiki=20status=20P4=20?= =?UTF-8?q?=E6=AE=B5=EF=BC=88SDD=20P1-P4=20=E5=85=A8=E5=AE=8C=E6=88=90?= =?UTF-8?q?=EF=BC=8C=E5=BE=85=20T6-cloud=20=E6=8E=92=E7=B7=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- system-dev/docs/3-specs/portal-auth/tasks.md | 26 +++++++++++++++++--- system-dev/wiki/status.md | 20 ++++++++++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/system-dev/docs/3-specs/portal-auth/tasks.md b/system-dev/docs/3-specs/portal-auth/tasks.md index e7b66fe..c1a6d6d 100644 --- a/system-dev/docs/3-specs/portal-auth/tasks.md +++ b/system-dev/docs/3-specs/portal-auth/tasks.md @@ -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 工作天) --- diff --git a/system-dev/wiki/status.md b/system-dev/wiki/status.md index 002ebd3..95f3d7b 100644 --- a/system-dev/wiki/status.md +++ b/system-dev/wiki/status.md @@ -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 自帶