手冊首頁 / 合規稽核 / 範本管理 / 合規資源庫

範本管理 / 合規資源庫(ModuleFrame)

功能群:合規框架與 SSP|資產模型先讀 功能群總覽

事實基準:2026-07-05 從 FE / BE code 掃出;endpoint 對 routes.json、schema 對 db_schema.json、error code 開檔驗(module_frame_error_code.py

變更紀錄

日期 FR 變更
2026-07-06 FR-047 改造成 hub 導航頁:明細下鑽拆至 資源庫明細、樣板編輯器拆至 樣板編輯器;本頁保留頁1 清單 CRUD / 複製 / enable 與子頁導航

1. 功能描述

範本管理是合規資源庫(ModuleFrame)的作者端。資源庫 = 專案成立時可 clone 的三件組(catalog + profile + 樣板 SSP)+ 預設稽核流程範本;綁定一個框架版本(oscal_framework_version_uid)與基準線(oscal_profile_uid),內容全部編在 template_ssp_id 指向的樣板 SSPoscal.system_security_plans;識別靠 template_ssp_id,非 is_template 欄,見 §9)——這是單一真相來源:讀取與寫入都走同一份樣板 SSP。

本頁作為導航 hub:頁1 清單(資源庫 CRUD / 複製 / enable 切換 / 下載)留在本頁,明細下鑽與樣板編輯器各自拆成獨立子頁。

三個相連頁面的分工:

  • 頁 1 清單(本頁)ModuleFrame.vue):資源庫 CRUD、複製、enable 切換、下載 SSP 樣板。
  • 頁 2 明細ModuleFrameDetail.vue):群組→控制項→AO 下鑽檢視,見 資源庫明細
  • 頁 3 樣板編輯ModuleFrameTemplateEditView.vue):多 tab 編樣板 SSP 全部內容,見 樣板編輯器

主要使用者:資源庫作者(管理員);scope=SYSTEM 的系統公版由 root 租戶 admin 維護、人人可讀。

角色速覽(本群非專案層角色,見 _overview §5):資源庫作者(管理員)為主;scope=SYSTEM 公版 root 租戶維護。

1.1 功能總覽(本頁全部功能)

本頁是 hub(清單 CRUD + 列操作 + 子頁導航):明細下鑽與樣板編輯器(含各子資源 field-level 逐欄規格)拆成子頁,見「詳述」欄連結。

# 功能 說明 位置 詳述
1 資源庫清單 / 篩選 分頁;篩選 status/enable/provider/framework/group 頁1 表格 §6.2
2 建立資源庫 手動 / docx / excel(→ import 精靈 頁1 建立下拉 →import
3 複製資源庫 clone 整組三件組(deep-copy 脫鉤) 頁1 操作 UC-MF-02
4 編輯基本資訊 name / group / description / provider / frequency 頁1 dialog §6.2
5 enable 切換 / 刪除 是否可用於成立專案;軟刪除(is_delete 頁1 操作 §12
6 明細下鑽 群組→控制項→AO;頻率 / 風險 / 責任部門 / 任務 頁2 資源庫明細
7 樣板內容編輯 適用控制項 / 受評標的 / 負責單位 / 元件·授權·資產 / 程序書池;多 tab 編樣板 SSP 頁3 樣板編輯器
8 匯入 / 匯出 control-defaults Excel 匯入匯出;SSP OSCAL 匯出;整包 import 頁1/3 樣板編輯器 §6 / import 精靈

UC(§2)展開本頁具實質後端邏輯的清單層功能:複製資源庫(3,UC-MF-02——三件組 deep-copy 脫鉤)。清單顯示(1)、建立(2)屬常規讀寫;明細下鑽(6)見 資源庫明細、樣板內容編輯(7,UC-MF-01 core)見 樣板編輯器;匯入 / 匯出精靈(8)於 匯入精靈頁,此處只交叉連結不重複。

2. Use Case

角色速覽(本群非專案層角色,見 _overview §5):資源庫作者(管理員)為主;scope=SYSTEM 公版 root 租戶維護。

流程圖視覺慣例:菱形 = 判斷、橘底 = 例外 / 擋下、紅框 = 錯誤(標 error code)、綠框 = 成功終點、虛線 = 可選路徑。

本頁只保留清單層 UC;樣板內容編輯的核心 UC-MF-01(控制項 / AO 現況預設值)拆到 樣板編輯器

UC-MF-02 複製資源庫(三件組 deep-copy 脫鉤)

項目 內容
角色 資源庫作者
前置條件 已選中一筆來源資源庫(source_mf_uid
產出 / 後置條件 deep-copy 建新 module_frames + 新樣板 SSP(新 template_ssp_id + profile)成脫鉤公版;來源 template_ssp_id 不動;日後改複本不影響來源 / 已成立專案(見 §12 坑 3)
uc_mf_02 start pick 資源庫清單 → 選一筆 → 複製 (source_mf_uid) start->pick call POST /module-frame/clone (+ 選填參數) pick->call newmf deep-copy 建新 module_frames (三件組脫鉤) call->newmf newssp 複製新樣板 SSP (新 template_ssp_id + profile) newmf->newssp keep 舊 template_ssp_id 不動 (來源資源庫不受影響) newmf->keep 來源保留 done 脫鉤公版落地(重查清單) 改此複本不影響來源/已成立專案 newssp->done
UC-MF-02 流程:清單選來源→POST /module-frame/clone→deep-copy 新 module_frame + 新樣板 SSP + profile→來源不動→脫鉤公版落地

3. 權限矩陣

操作 FE 判定 BE 強制 BE 檢查位置
讀 / 清單 登入 + 選單權限 @jwt_required() route
資源庫 CRUD / 複製 選單能力(作者) @jwt_required() + 業務前置(名稱不重複…) app/module_frame/service/*
成立專案用(下游) enable + published 未發布 → GRC_412031(在 project-create,非本頁) project_start_app_service

本頁多為 JWT + 選單能力守門;細粒度前置以 error code 表達(見 §4 / §10)。scope=SYSTEM 公版的寫入權另受 root 租戶約束。樣板內容編輯的前置(控制屬 profile、子資源名稱不重複…)見 樣板編輯器 §3

4. 狀態機與前置條件

本頁(清單層)gate:

條件 效果 出處
enable=1 且 published 才可用於成立專案 下游 project-create
is_delete=1 軟刪除,不列於清單 module_frames.is_delete

樣板內容編輯的前置(控制項不屬 profile → MODULE_FRAME_400001、無樣板 SSP → 404004、子資源名稱重複 → 409001~409005、匯入檔格式 → 400003/400004)見 樣板編輯器 §4

5. UI 設計

工具列:篩選(status/enable/provider/framework/group)・建立(手動/docx/excel) POST /module-frame(分頁 body: pager/sort/filters) 開啟:範本匯入精靈 spec +匯入建立 → 頁1 資源庫清單 — 本頁主工作區(DataTable) 名稱|群組|提供者|框架版本|基準線|enable 徽章|狀態|功能 亞洲航空 CMMC 2.13 L1 ・ CMMC ・ enable 三件組:catalog + profile + 樣板 SSP 內容單一真相 = template_ssp_id 開啟:資源庫明細下鑽 spec 明細下鑽 → 群組→控制項→AO 唯讀檢視 GET /module-frame/{uid} 開啟:資源庫樣板編輯器 spec 樣板編輯(多 tab)→ 控制預設/單位/元件/程序書 PUT …/control-defaults 列操作(本頁):複製(clone 三件組脫鉤)・enable 切換・下載樣板・軟刪除(is_delete) POST /module-frame/clone | PUT/DELETE /module-frame/{uid} 分頁 / 排序 clone = deep-copy 新 module_frame + 新樣板 SSP + profile,脫鉤公版 彩色=有獨立子頁的區塊,整塊可點擊跳轉(teal=資源庫明細/coral=樣板編輯器/pink=匯入精靈)|灰=hub 本頁描述(清單 / 列操作)|虛線框=本頁主工作區 API 僅列代表性,完整規格見 §6 與各子頁 §6
資源庫管理 hub 版面 wireframe:頁1 清單 CRUD / 複製 / enable 為本頁;明細下鑽導向資源庫明細子頁、樣板編輯導向樣板編輯器子頁,皆可點跳轉

實機截圖(STG,亮色模式,2026-07-05,帳號 blsadmin):

資源庫清單:亞洲航空 CMMC 2.13 Level 1 / 亞○ CMMC L1 合規資源庫 / CMMC 2.0 建議範例資源庫 / OOO Airline 四筆

版面骨架(三頁全景):

mf_ui_layout page 頁 1:資源庫清單 (ModuleFrame) 篩選(狀態/enable/provider/framework/group) +建立(手動/docx/excel)|複製|下載 SSP 樣板 列:名稱 / 群組 / provider / 框架 / profile / 狀態 / enable / 版本 / 稽核流程範本|⋮ 編輯基本/刪除/enable 切換 頁 2:明細 (ModuleFrameDetail)群組→控制項→AO 下鑽 樹 + 麵包屑;面板:頻率/風險/責任部門;任務表;每項編輯/刪除 頁 3:樣板編輯 (ModuleFrameTemplateEditView)=編樣板 SSP Tabs :基本資訊|適用控制項(控制樹→AO 現況/工作流/任務)|受評標的(system-characteristic)|負責單位(parties org)|負責人員(parties person)|元件+外部授權+資產|程序書池(reference-documents) 動作:發布|編輯納入控制項(樹選)|編輯基本資訊|下載 SSP 樣板  狀態徽章:draft/published 所有內容編輯都寫進 template_ssp_id 指向的樣板 SSP(單一真相來源)
資源庫管理版面:頁1 清單、頁2 明細下鑽、頁3 樣板編輯多 tab(全寫進樣板 SSP)

狀態呈現:清單狀態 / enable 徽章。明細下鑽與樣板編輯器狀態呈現見各子頁 §5。

6. API 規格

Envelope:成功 {"status": true, "data": …, "meta": …}、失敗 {"error_code": "…", "msg": "…"}

6.1 總清單(本 hub 呼叫的 endpoint)

分類 Method + Path 說明 完整規格
清單 / CRUD GET/POST /module-frame、GET/PUT/DELETE /module-frame/{uid} 資源庫讀 / 建 / 改 / 刪 §6.2
選單 GET /module-frame(filter published) 下拉(成立專案 / 篩選) GAI-SD-02
複製 POST /module-frame/clone clone 三件組 §6.2
下載 GET /module-frame/download/{template,yaml-template} 空白匯入樣板 GAI-SD-02

樣板內容編輯的全部 endpoint(control-defaults / objective-defaults / parties / components / leveraged / inventory / system-characteristic / reference-documents / ssp 匯出入)見 樣板編輯器 §6

6.2 核心 endpoint

[GET|POST] /module-frame(清單 / 建立)

清單 Request:

欄位 型別 必填 說明
pager object 分頁參數
sort object 排序參數
filters object 篩選條件(見下列子欄位)
filters.enable 是否啟用
filters.status 狀態
filters.provider 提供者
filters.group 群組
filters.framework_version_uid 框架版本
filters.profile_uid 基準線

建立 Request body:

欄位 型別 必填 說明
name string 名稱
group string 群組
description string 描述
provider string 提供者
frequency 頻率
oscal_framework_version_uid varchar(36) 綁定的框架版本
oscal_profile_uid varchar(36) 綁定的基準線

Response data[] ModuleFrameDTO(+ meta)

欄位 型別 說明
uid varchar(36) 唯一識別碼
name string 名稱
group string 群組
provider string 提供者
version 版本
frequency 頻率
enable int 是否啟用
framework 綁定的框架版本
profile 綁定的基準線
audit_flow_template_uid varchar(36) 預設稽核流程範本

出處:api/module_frame/routes/module_frame_route.py::ModuleFramesRouteapp/module_frame/service/module_frame_service.py::get_module_frames_and_pager

[POST] /module-frame/clone

clone 整組三件組(新 module_frame + 新樣板 SSP + profile)成脫鉤公版。Request:source_mf_uid(+ 選填參數)。出處:app/module_frame/service/*clone*

7. 前端檔案地圖(compliance-manager-fe/)

檔案 角色
src/views/module_frame/ModuleFrame.vue 頁1 清單 CRUD / 複製 / enable(本頁)
src/views/module_frame/ModuleFrameDetail.vue 頁2 群組→控制項→AO 下鑽(見 資源庫明細
src/views/module_frame/ModuleFrameTemplateEditView.vue 頁3 樣板編輯 tab(見 樣板編輯器
src/config/router/index.js:431-448 routes module-frame / -items / -template-edit
src/config/api/api.js endpoint 常數(MODULE_FRAME 等)
src/config/locales/i18n/zh-tw/module-frame.json 頁面 i18n

8. 後端檔案地圖(本頁核心鏈路)

鏈路 Route App Service 底層
清單 api/module_frame/routes/module_frame_route.py::ModuleFramesRoute app/module_frame/service/module_frame_service.py::get_module_frames_and_pager domain/module_frame/service/module_frame_domain_service(join framework_version + profile)
複製 module_frame_route.py(clone 端點) module_frame_service.pyclone deep-copy 三件組

樣板內容編輯的鏈路(control-defaults / 子資源)見 樣板編輯器 §8

DDD 提醒:所有內容編輯解析到 template_ssp_id 對樣板 SSP 寫入(單一真相來源);勿在本群另建 sidecar 表存預設值。

9. DB

9.1 資料表總清單(本頁讀寫的表)

讀/寫 說明 欄位詳述
compliance.module_frames 讀 / 資源庫主檔(三件組指標 + enable + scope) §9.3
compliance.module_frames_trans 讀 / name / description / group 翻譯 GAI-SD-03
oscal.system_security_plans 樣板 SSP(module_frames.template_ssp_id 指向)— clone 時複製 樣板編輯器 §9
oscal.profiles / catalogs 綁定的基準線 / 控制母體 GAI-SD-03

樣板 SSP 底下子表(ssp_implemented_requirements / ssp_statements / ssp_components / parties…)的讀寫在 樣板編輯器 §9

9.2 ER 圖

mf_er mf compliance.module_frames 資源庫主檔 uid / name / group / provider enable / scope(SYSTEM/tenant) oscal_framework_version_uid oscal_profile_uid template_ssp_id ← 樣板 SSP audit_flow_template_uid is_delete(軟刪除) tr compliance.module_frames_trans name/description/group 翻譯 mf->tr 1:N locale ssp oscal.system_security_plans 樣板 SSP(is_template=True) ★內容編輯的單一真相來源 mf->ssp template_ssp_id ir oscal.ssp_implemented_requirements ssp_statements 控制項/AO 現況預設值 (control-defaults / objective-defaults) ssp->ir 1:N sub oscal.ssp_components / ssp_leveraged_authorizations ssp_inventory_items / parties ssp_reference_documents 元件/外部授權/資產/ 人員/程序書池 ssp->sub 子資源
資源庫 → template_ssp_id 樣板 SSP → ssp_* 子表(單一真相來源);module_frames_trans 翻譯

9.3 核心表欄位(取自 DEV DB dump,含 DB comment)

compliance.module_frames — 合規資源庫主檔

欄位 型別 說明
uid varchar(36) 唯一識別碼
name / group / provider / version / frequency varchar 基本資料
enable int 是否啟用(可否用於成立專案)
oscal_framework_version_uid varchar(36) 綁定的框架版本
oscal_profile_uid varchar(36) 綁定的基準線
template_ssp_id int 樣板 SSP(oscal.system_security_plans.id)— 內容編輯的單一真相來源(FR-036)。⚠️ 樣板 SSP 的識別/連結靠本欄 template_ssp_id 指向add_empty_ssp(is_template=True) 是 FR-036 建立時語意,但 is_template 在現行 v2 system_security_plans 非 live DB 欄位(FR-036 migration 針對舊表名 oscal.ssps,v2 實際表為 system_security_plans),故不可用 WHERE is_template=true 查樣板 SSP
audit_flow_template_uid varchar(36) 預設稽核流程範本 → compliance.flow_templates.uid(soft ref)
scope varchar(20) tenant scope:SYSTEM=系統公版(admin 維護 / 人人可讀 / owner=ROOT tenant)
is_delete int 軟刪除(0=正常 / 1=已刪除)

10. 頁面邏輯與資料對應

載入:頁1 GET /module-frame(分頁 body)。

關鍵欄位對應

畫面元素 API 欄位
清單狀態 / enable 徽章 ModuleFrameDTO enable / status
框架 / 基準線欄 framework / profile(join 帶出)

儲存流程:清單層 CRUD 各自 POST/PUT/DELETE;樣板內容編輯的載入 / 儲存見 樣板編輯器 §10

錯誤對應:清單層以常規 CRUD 前置為主;樣板內容編輯的 error code(MODULE_FRAME_400001 等)見 樣板編輯器 §10

11. 背景行為與外部依賴

類型 內容
匯入解析 control-defaults Excel / 整包 import 走解析(見 _overview §4module-frame-import
可翻譯欄位 module_frames_trans;寫 name/description/group 要傳 locale(docs/claude/translatable-fields.md
Socket 本頁 socket
jedi-* 套件 jedi-oscal-v2(樣板 SSP / catalog / profile)
系統參數 scope=SYSTEM 公版;enable 決定成立專案可用性

12. 邊界情況與已知坑

  1. 樣板 SSP 單一真相來源:控制預設 / AO / 元件 / 人員 / 系統特性 / 程序書全部讀寫 template_ssp_id 指向的樣板 SSP,不要另建 sidecar 表存預設值(會變第二套真相)。細節坑見 樣板編輯器 §12
  2. clone deep-copy 脫鉤:複製建新 module_frame + 新樣板 SSP;舊 template_ssp_id 不動;專案成立時也是 clone 這組,改資源庫不影響已成立專案
  3. 可翻譯欄位要傳 localemodule_frames_trans 存翻譯,不傳 locale 的 update 對前端 failover 讀取無效
  4. enable / published 才可成立專案:未啟用 / 未發布 → 下游 GRC_412031(在 project-create)
  5. scope=SYSTEM 公版:系統公版由 root 租戶 admin 維護、人人可讀;一般租戶改不動
  6. 軟刪除是 is_delete 不是 deleted_at:本表用 is_delete(0/1),與 projects 的 deleted_at 慣例不同

13. 開發與驗證

  • 跑起來:BE python main_socketio.py(port 8000,log 在 log/app.log);FE Vite dev server。BE 改 service code 必重啟
  • 測試帳號:資源庫作者 / 管理員;scope=SYSTEM 需 root 租戶帳號(密碼見 .env / 部署文件)
  • 導航路徑:側邊選單「範本管理 / 合規資源庫」(/module-frame/module-frame)→ 明細 / 樣板編輯
  • 前置資料:需一個框架版本 + profile;樣板 SSP 由建立資源庫時生成
  • E2Ecompliance-manager-test/ repo;以 資源庫 / module-frame / ModuleFrame 搜尋
  • 相關文件資源庫明細樣板編輯器、匯入精靈 module-frame-import、下游消費 project-create、資產模型 _overview;memory feedback_mf_defaults_single_source_of_truth