本卡屬 FR-161(母卡見「母卡」欄),第 6 棒:讓客戶的網路架構圖能隨 OSCAL 匯出。接在卡 5 之後。
OSCAL 的系統安全計畫有一個專門放「網路架構圖」的位置。系統的資料表已經有這個位置,但主專案從來沒有程式寫進去,所以匯出時永遠是空的。這張卡讓顧問在程序書池「網路架構」那一段的檔案上勾一下「當網路架構圖匯出」,系統就把它寫進這個位置,匯出時就會帶出去。不開新 tab,不做線上繪圖或預覽。
套件 jedi-oscal-v2(~/Projects/Jedicogy/module/jedi-python-package/jedi-oscal-v2/jedi_oscal_v2/)
infra/model/ssp/oscal_ssp_diagram.py 表 ssp_diagrams:system_characteristics_id FK、
diagram_context、sort_order、uuid、description、
caption、props、links、remarks
domain/repository/ssp/ssp_diagram.py ISspDiagramRepo
infra/repository/ssp/ssp_diagram_repo_impl.py
app/service/io/oscal_io_service.py 匯出時組 system-characteristics
主專案:grep SspDiagram / ssp_diagram 在 app/ api/ 沒有任何結果(沒有寫入端)
app/oscal/service/ssp_network_diagram_service.py),透過套件的 repo interface 寫 ssp_diagrams:diagram_context='network-architecture'(model 註解定的值域:authorization-boundary/network-architecture/data-flow)、caption=程序書池列的 description、links=指向檔案的 OSCAL link(匯出端 oscal_io_service.py 約 758 行組 network-architecture,先看它怎麼讀 diagrams 的 links 再定 rel 與 href)、props 放 ssp_reference_document_uid 方便反查。PUT/DELETE /ssp/<ssp_uid>/document-pool/<doc_uid>/diagram,守門走 require_manager。PUT 寫一筆(已存在就不重寫),DELETE 刪那筆。只允許「網路架構」大類(seed_key='network',或顧問改名後仍是那一筆)的列勾選,其他大類回 400。list_pool 的回傳每列多 as_diagram(是否已勾)。jedi_oscal_v2/app/service/ssp/ssp_clone_service.py 約 148 行複製 system-characteristics 時會連 diagrams[] 一起複製,這四條路徑不用另補。⚠️ 但 props 裡的 ssp_reference_document_uid 複製後會指向舊 SSP 的程序書池列;反查時改用 links 裡的 file_id,或在 ssp_snapshot_extras 配對後改寫。選哪個寫進回寫。DocumentPoolPanel.vue 的「網路架構」段每列加勾選「當網路架構圖匯出」(v-tooltip.top 說明「匯出 OSCAL 時放進 network-architecture」)。oscal.ssp_diagrams 多一筆;取消後消失。system-security-plan.system-characteristics.network-architecture.diagrams 有它。feature/FR-139。在當前 branch 工作,不切 branch;branch 不對就停下回報。