Guidant AI v1.26.0 Release Note¶
| 項目 | 內容 |
|---|---|
| 版本 | 1.26.0(功能版號;主軸=存取管理:角色、指派、檢查存取、角色明細樹四頁取代角色管理,208 項權限全部實際檢查) |
| 發布日期 | 2026-10-08 |
| 上一版本 | 1.25.1(2026-10-06) |
| 涵蓋區間 | BE v1.25.1..本版進版 commit(232 commits);FE feature/azure-iam 72 commits;jedi-* 19 支套件發新版 |
| 涵蓋需求 | FR-132 存取管理(CM-2510 母卡、CM-2511~2600 子卡 76 張) |
| 規模 | 主線 DB migration 27 支;Python 套件升版 19 支(jedi-iam 1.4.8→1.5.0,其餘 patch);BE 新增權限矩陣 API 模組;FE 存取管理四頁、342 顆按鈕改照權限隱藏 |
| 適用部署 | GitLab pipeline 出包後部署 190 e2e 驗;STG/POC 待決策者放行 |
為什麼是功能版號:新增存取管理四頁、角色匯出匯入、指派起訖日;且 208 項權限由「部分只驗登入」改為全部實際檢查,使用者看得到、行為會變。
0. 發版前回歸 gate¶
決策者 2026-10-08 裁示:test repo site-regression 全套回歸已與現版功能脫節,整套重建前發版不以 e2e 為 gate(memory project_site_regression_gate_suspended_until_rebuild)。本版未跑 e2e 全套回歸。
以此為上線依據:76 張子卡各自驗收通過;權限全部真擋後,出貨五角色各建臨時帳號在 DEV 走遍側欄全部頁(19~36 頁/人,0 個 403、0 個錯誤提示)、13 模組 31 支代表寫入端點 × 五角色實打,403 與角色設定全部吻合;舊庫升級排練(190 E2E 安裝版,基線 1.22.0)15 個角色、21 個帳號逐一比對,升級前持有的權限零遺失。
1. 概述¶
公司層權限原本是「角色勾 123 個能力點」,骨架在但四處沒接上:指到部門的角色其實整個租戶有效、起訖日判了但畫面設不了、33 支 API 只驗登入、三套命名寫法並存。另有兩個資安漏洞:選單明細與登入 token 的管理員旗標不過濾到期/停用的指派。
本版照「誰 × 角色 × 範圍 × 時效」補完:能力點改三段式名稱(模組.資源.動詞)、角色支援萬用字元(grc.*.*、*.*.read)、起訖日真的進判定、33 支補守門、存取管理四頁、角色 JSON 匯出匯入;並把所有 208 項權限改為實際檢查。
2. 新功能:存取管理¶
- 存取管理取代原本的「角色管理」,側欄「存取管理」分組四頁:角色、指派、檢查存取、角色明細。舊網址
/auth/role-manage自動轉到新頁。 - 角色用權限樹勾選:依側欄頁面分組三層(分組 › 側欄頁 › 內頁),每頁分「可進入頁面」與「可使用功能」;專案管理底下另分專案規劃、專案總覽、稽核計畫三個子頁。同一項權限只列在一頁(擁有者規則:直綁 → 歸屬頁 → 同資源數 → 先出現者),勾選以權限為單位。
- 指派可設起訖日:一筆指派=使用者 × 角色 × 範圍 × 起訖日。到期的指派仍列在表上並標「已到期」,但權限判定與側欄選單不再採計,重新登入即生效。部門範圍目前只當屬性記錄,判定上與整個租戶相同(部門資料隔離本版不做,決策者裁)。
- 帳號表單的角色區塊改唯讀,旁有「管理指派」鈕;匯入帳號維持單角色。
- 檢查存取:輸入帳號,列出每項權限的來源角色與到期日、以及他實際看得到的側欄;系統管理員顯示豁免說明。
- 角色 JSON 匯出匯入:可把一個環境設定好的角色帶到另一個環境;同名另存,不覆蓋內建系統管理員;匯入含不認得的權限名回 400 並列出。
- 出貨五個角色:系統管理員(
*.*.*,每租戶恰一個,內建不可改不可刪)、稽核主管、稽核員、一般成員、唯讀。後四個是範例,可改可刪可複製。新租戶建立時由同一份定義長出。 - 頁內按鈕照權限隱藏:117 支有按鈕的頁、342 顆按鈕(222 顆帶專案層條件)改為沒權限就不顯示,不再「看得到、按了才失敗」。專案內頁雙層判定:公司層權限+專案成員角色。
2b. 新功能:錯誤追蹤(Sentry)可接上¶
後端 500 等未預期錯誤可送到錯誤收集站台(Sentry,雲端或落地版皆可)。在主機 guidant.env 設 SENTRY_DSN 並重起服務即啟用,不設就不送、服務不受影響;啟用時 guidant-api log 印「錯誤追蹤已啟用(environment=…, release=guidant-ai@1.26.0+
3. 重要:所有功能開始檢查權限¶
本版起,系統內每一項功能(208 項權限)都實際檢查使用者的角色有沒有勾選對應權限。前一版有 70 項新補的守門只記錄不擋,本版全部改為真的擋(決策者裁不跑觀察期,直接擋)。
缺權限時後端回 403,錯誤碼 GRC_403022,回應寫明缺的權限名;前端顯示「使用者不具備此操作所需的權限(需要權限:××)」。
升級時系統自動補權限,原本做得到的事升級後仍做得到(升級排練逐角色驗過零遺失):
- 原本的權限改了新名稱,角色上的勾選跟著改名。
- 新拆出的 90 項權限依「這個功能原本靠什麼權限」補給既有角色:原本由某權限把關 → 補給持有那個權限的角色;原本只要登入就能用 → 補給所有角色;本版才有的新功能 → 只補給管理員角色。
- 能核准、關閉稽核輪次或能檢視專案的角色,自動補「檢視稽核」(否則進不了輪次總覽頁)。
- 原本的管理員角色:權限等於租戶全集者轉為新的系統管理員(
*.*.*,同租戶多個取最早建的);其餘保留管理員身分、權限原樣轉、不升級。 - 平台層功能(授權管理、AI 額度上限、系統支援、Google Drive 應用程式憑證、框架目錄維護)仍只有平台管理員能用,租戶管理員看不到也用不了。
請管理員升級後確認一件事:自建角色若有人反映「某個按鈕不見了」或操作時出現無權限提示,請到 存取管理 → 角色,在該角色的權限樹勾上對應頁面的功能;用「檢查存取」可以查出缺哪一項。
4. 其他行為變更¶
- 任務相關動作(任務、留言、證據、問卷填答)看任務權限;結案後的問卷內容與任務的檢測工具執行紀錄,持「檢視任務證據」亦可讀。
- 問卷本體端點依情境守門:任務情境看任務權限,管理情境看問卷設計器權限。
- 任務卡沒有「檢視任務」權限時不可點開。稽核員範本任務組只給檢視與修改,不給指派/匯入/匯出。
- 到期或停用的管理員指派,重新登入後不再看到管理頁入口;登入 token 的管理員旗標同樣過濾。
- 選單、頁面入口、按鈕顯示與後端檢查改用同一套矩陣判斷。
- 儀表板沒有專案讀取權限時不打統計 API。
- 問卷管理清單頁 500 修正(jedi-survey,CM-2535 手測發現)。
5. 升級須知¶
- 升級照常
install.sh --upgrade。init image 以 migrate 模式套 27 支主線 migration + 第三輪能力點宣告與角色回補;升級自動補授腳本改寫新表role_capability_patterns(CM-2562),日後新增權限才補得到保留管理員旗標但非全集的角色。 - 升級後角色與指派沿用;舊「角色管理」書籤自動轉到「角色」頁。
- 權限矩陣與角色 pattern 展開有程序內與 Redis 快取,升級流程重啟服務即清;日常改角色或指派由服務自行失效。
- 升級後請管理員用「檢查存取」抽查一兩個自建角色的帳號,確認側欄與預期一致。
6. Breaking Changes¶
- 能力點名稱全面改三段式(123 舊名 → 208 新名,舊名存
capabilities.legacy_name對照);workflow.*四項刪除(無頁面引用),bulletin.read併入workspace.bulletin.read。外部若直接讀capabilities.name要改用新名。 - 權限判定只讀
role_capability_patterns,舊表role_capabilities保留但不再是判定依據。 - 70 項原本只記錄的守門改為真的擋:缺權限的自建角色升級後會在對應頁面被擋(補授規則見第 3 節)。
- 側欄「角色管理」由「存取管理」分組取代。
7. DB Migration¶
主線 27 支(2026-10-06-fr132-* 6 支、2026-10-07-fr132-* 14 支、2026-10-08-fr132-* 7 支),全部 phase=active/envs=*,依 manifest 行序套。要點:capabilities 加八欄(module/display_name/sort/assignable_scopes/license_module/legacy_name/enforce_mode/home_route_name)+ 118 項改名;新表 role_capability_patterns;roles 加 is_system/is_template;ui_routes 加 is_menu/tree_page;org_units.path 回填;三支補授與一支回收;最後一支把 enforce_mode 全改 enforce。
出貨基線已兩次重產(a70536d69、a256816da),02-schema.sql/04-seed-core.sql/99-stamp.sql 與基線庫對齊;04 的角色由 Administrator 改為出貨五角色,06-admin 以 is_system 反查綁 root admin。
舊庫升級排練:190 E2E 安裝版(基線 1.22.0、285 支)走 migrate.sh 正式路徑,主線 25 支一次套完、套件輪 0、第三輪宣告 208;重跑冪等。紀錄 docs/features/FR-132-2610-access-management/inventory/a2-upgrade-rehearsal.md。
8. 相依套件版本¶
jedi-* 19 支發新版至 Nexus(jedi repo 143c309e):
| 套件 | 版本 | 套件 | 版本 |
|---|---|---|---|
| jedi-iam | 1.5.0(pattern 授權、tree_page、守門換代) | jedi-common | 1.3.6 |
| jedi-asset | 1.2.3 | jedi-bulletin | 1.2.2 |
| jedi-system-core | 1.2.3 | jedi-log | 1.3.3 |
| jedi-task-platform | 1.3.2 | jedi-compliance-audit | 1.3.5 |
| jedi-survey | 1.2.4 | jedi-detection | 1.2.8 |
| jedi-remote-agent | 1.4.1 | jedi-file-upload | 1.3.5 |
| jedi-issue | 1.3.3 | jedi-license-runtime | 1.1.6 |
| jedi-ai-bot | 1.5.1 | jedi-ai-dashboard | 1.6.2 |
| jedi-flow-engine | 1.4.2 | jedi-evidence-classification | 1.6.3 |
| jedi-notification | 1.2.4 |
image 基底與第三方 image 同 1.25.1。
本版 SBOM 與弱點比對結果¶
數字取自 CI package job 的 vuln-summary.md(pipeline 2926721749,2026-10-08,sentry_sdk 整包編進產物的最終重出),關卡判定 ✅ 放行。
總表:Trivy 不帶參數掃(客戶驗收基準),自家四顆 image¶
| image | Critical | High | Medium | Low | 合計 | 可修 | 上一版(1.25.1) |
|---|---|---|---|---|---|---|---|
| be(後端) | 0 | 0 | 18 | 13 | 31 | 1 | 29 |
| classifier(證據分類沙箱) | 0 | 0 | 18 | 12 | 30 | 1 | 28 |
| fe(前端) | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
| init(建庫) | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
| 合計 | 0 | 0 | 38 | 25 | 63 | 4 | 57 |
較 1.25.1 多出的 6 條全是 Ubuntu/Alpine 兩天內新公告的 Medium(libfreetype6 CVE-2026-95512 be/classifier 各 1、zlib CVE-2026-85091 fe/init 各 1,皆已有修正版,下次 build 吃進);其餘為發行版尚未出修正版的 Medium/Low(狀態 affected)。
細項¶
- Python 層(pip-audit):be 263 套件(+sentry-sdk 2.71.0 隨本版進包)、classifier 35 套件,已知漏洞 0
- OS 層(Trivy,客戶驗收基準):四顆 image Critical 0/High 0/可修 4(全 Medium:be 與 classifier 的 libfreetype6、fe 與 init 的 zlib)
- Grype 第二意見:四顆 Critical 0;High 13 條皆上游未出修正——be 4 條(CINC 自帶 openssl 3.6.4)、fe 3 條(Alpine tiff/zlib)、init 6 條(Alpine py3-cryptography 47.0.0/zlib);與 1.25.1 相同
- 白名單豁免 0 條(白名單只剩檔案 Agent 一條 krb5,至 2026-12-31,理由見
scripts/build/vuln-allowlist.txt) - SBOM(CycloneDX)元件數:be 674、classifier 235、fe 72、init 68;報告隨安裝包出貨
- 第三方 image(postgres/redis/seaweedfs)同 1.25.1 釘 digest,未重掃
- 本版修掉 0 條、新增 6 條(皆發行版新公告、已有修正版)
9. 部署順序¶
- GitLab pipeline 2926721749(main
01dca31a4,最終出包;前兩次 2925933217 缺 sentry-sdk、2926571216 缺 sentry_sdk integrations 子包,兩個壞包改名.BAD-*留 188 對照):verify → build 四顆 image → package(弱點門檻、安裝包、推 Harbor)→ deploy 190。188 開跑前pgrep -f 'nuitka|build_all'確認無手跑 build。 - 190 e2e 驗:blsadmin 進存取管理四頁;用稽核人員帳號確認側欄少了管理頁、打角色清單回 403;建一個以稽核員為範本的角色拿掉一項權限指派後重登看側欄變化;把一筆指派到期日改成昨天重登確認失效;匯出一個角色再匯入。
- STG(188)、POC(189):等決策者放行。POC 等同 production。
- 定版 tag 由決策者本人打並推(
git push origin v1.26.0,BE/FE 兩 repo)。
10. 已知限制與 follow-up(不擋本版)¶
- e2e 全套回歸未跑:site-regression 整套重建前不作為 gate;重建範圍另開討論(整組重寫或縮成 smoke+主鏈兩層)。
- 跨卡整體 code review(arc-review)未做:三 repo 合計 736 檔/7 萬行超出一次審閱範圍,決策者裁直接進版;跨卡不一致風險留給上版後回報。
- 乾淨安裝無基線庫時能力點如何從套件宣告長出,另開 FR。
- 提權入口「只能指派不高於自己的角色」記下一版。
- FR-B 專案層成員角色合併另開 FR;部門資料隔離(D12)記為設計決定不做;舊資料與法規證據保留另開討論串。
GET /user/<uid>對停用列回 500(jedi-iamuser_route.py:146),帳號列表不顯示停用列故一般操作碰不到,順手收。- 三條既有紅燈(worktree 比對確認非本版引入):
test_route_guard_inventory(survey 兩支未登記)、test_permission_matrix_three_way(FE v-can 與矩陣未重產)、test_drive_sync_admin_service::test_guard_non_manager_forbidden[None]。
11. 相關文件¶
- Notion:母卡 CM-2510;收口 CM-2596(釘版發版)、CM-2599(spec)、CM-2600(進版)
docs/features/FR-132-2610-access-management/:design.md、FR-132-STATE.md、FR-132-LOG.md、inventory/a1-capability-tree.md(557 支 route → 能力點對照)、inventory/a2-upgrade-rehearsal.md- spec 站:
system-admin/access-roles.md、access-assignments.md、access-check.md、access-role-detail.md;使用手冊user-manual/access-management-guide.md - 分析:
docs/analysis/2026-10-07-fr132-d12-org-unit-isolation-not-doing.md