跳轉到

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+)」。事件帶 release(含 commit)、environment、request_id 標籤,可對回 api log 的同一筆請求;請求內容與憑證不送出。本版起 sentry-sdk 隨出貨包內建,前一版沒有。

3. 重要:所有功能開始檢查權限

本版起,系統內每一項功能(208 項權限)都實際檢查使用者的角色有沒有勾選對應權限。前一版有 70 項新補的守門只記錄不擋,本版全部改為真的擋(決策者裁不跑觀察期,直接擋)。

缺權限時後端回 403,錯誤碼 GRC_403022,回應寫明缺的權限名;前端顯示「使用者不具備此操作所需的權限(需要權限:××)」。

升級時系統自動補權限,原本做得到的事升級後仍做得到(升級排練逐角色驗過零遺失):

  • 原本的權限改了新名稱,角色上的勾選跟著改名。
  • 新拆出的 90 項權限依「這個功能原本靠什麼權限」補給既有角色:原本由某權限把關 → 補給持有那個權限的角色;原本只要登入就能用 → 補給所有角色;本版才有的新功能 → 只補給管理員角色。
  • 能核准、關閉稽核輪次或能檢視專案的角色,自動補「檢視稽核」(否則進不了輪次總覽頁)。
  • 原本的管理員角色:權限等於租戶全集者轉為新的系統管理員(*.*.*,同租戶多個取最早建的);其餘保留管理員身分、權限原樣轉、不升級。
  • 平台層功能(授權管理、AI 額度上限、系統支援、Google Drive 應用程式憑證、框架目錄維護)仍只有平台管理員能用,租戶管理員看不到也用不了。

請管理員升級後確認一件事:自建角色若有人反映「某個按鈕不見了」或操作時出現無權限提示,請到 存取管理 → 角色,在該角色的權限樹勾上對應頁面的功能;用「檢查存取」可以查出缺哪一項。

4. 其他行為變更

  • 任務相關動作(任務、留言、證據、問卷填答)看任務權限;結案後的問卷內容與任務的檢測工具執行紀錄,持「檢視任務證據」亦可讀。
  • 問卷本體端點依情境守門:任務情境看任務權限,管理情境看問卷設計器權限。
  • 任務卡沒有「檢視任務」權限時不可點開。稽核員範本任務組只給檢視與修改,不給指派/匯入/匯出。
  • 到期或停用的管理員指派,重新登入後不再看到管理頁入口;登入 token 的管理員旗標同樣過濾。
  • 選單、頁面入口、按鈕顯示與後端檢查改用同一套矩陣判斷。
  • 儀表板沒有專案讀取權限時不打統計 API。
  • 問卷管理清單頁 500 修正(jedi-survey,CM-2535 手測發現)。

5. 升級須知

  1. 升級照常 install.sh --upgrade。init image 以 migrate 模式套 27 支主線 migration + 第三輪能力點宣告與角色回補;升級自動補授腳本改寫新表 role_capability_patterns(CM-2562),日後新增權限才補得到保留管理員旗標但非全集的角色。
  2. 升級後角色與指派沿用;舊「角色管理」書籤自動轉到「角色」頁。
  3. 權限矩陣與角色 pattern 展開有程序內與 Redis 快取,升級流程重啟服務即清;日常改角色或指派由服務自行失效。
  4. 升級後請管理員用「檢查存取」抽查一兩個自建角色的帳號,確認側欄與預期一致。

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. 部署順序

  1. 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。
  2. 190 e2e 驗:blsadmin 進存取管理四頁;用稽核人員帳號確認側欄少了管理頁、打角色清單回 403;建一個以稽核員為範本的角色拿掉一項權限指派後重登看側欄變化;把一筆指派到期日改成昨天重登確認失效;匯出一個角色再匯入。
  3. STG(188)、POC(189):等決策者放行。POC 等同 production。
  4. 定版 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-iam user_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