[FEAT] Epic C / C1 operativo — valutazione/stato di conformità per requisito (mig.047)
org_requisito_state (org x requisito -> stato + valutazione del rischio + note), la valutazione 'parte vuota'. È da qui che emerge lo stato di conformità (sostituirà il Gap ACN, C3). - FrameworkController: catalog ora include lo stato per-org di ogni requisito (risoluzione org OPZIONALE con verifica accesso = anti-IDOR); nuovo POST /framework/state (upsert, requireOrgRole org_admin/compliance_manager, validazione stato + requisito esistente). - misure-requisiti.html: colonna Stato/Valutazione (se org) + modale di valutazione (stato, valutazione del rischio, note). api.frameworkSetState. Smoke prod: catalog has_org/org_class OK; upsert non_conforme persistito e riletto; ISOLAMENTO multi-tenant verificato (org 152 non visibile a org 151). Additivo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
92d101b6f4
commit
b34bf3f9f6
@@ -0,0 +1,30 @@
|
||||
-- =====================================================================
|
||||
-- 047 — Stato/valutazione per-org di ogni REQUISITO (Epic C / C1 operativo)
|
||||
-- =====================================================================
|
||||
-- Per ogni organizzazione e per ogni requisito del framework (cfg_nis2_requisiti)
|
||||
-- conserva la VALUTAZIONE DEL RISCHIO (che "parte vuota") e lo STATO di conformita'.
|
||||
-- È da qui che emerge lo stato di conformita' dell'azienda (sostituisce il modulo
|
||||
-- "Analisi GAP ACN", C3). Org-scoped, additivo, reversibile (DROP TABLE).
|
||||
--
|
||||
-- Runner-safe: solo CREATE TABLE IF NOT EXISTS (no DELIMITER/stored-proc).
|
||||
-- =====================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS org_requisito_state (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
organization_id INT NOT NULL,
|
||||
requisito_id INT NOT NULL,
|
||||
stato ENUM('da_valutare','non_applicabile','non_conforme','parziale','conforme')
|
||||
NOT NULL DEFAULT 'da_valutare',
|
||||
valutazione_rischio TEXT NULL,
|
||||
note TEXT NULL,
|
||||
updated_by INT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_org_req (organization_id, requisito_id),
|
||||
KEY idx_ors_org (organization_id),
|
||||
KEY idx_ors_req (requisito_id),
|
||||
CONSTRAINT fk_ors_org FOREIGN KEY (organization_id) REFERENCES organizations (id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_ors_req FOREIGN KEY (requisito_id) REFERENCES cfg_nis2_requisiti (id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_ors_user FOREIGN KEY (updated_by) REFERENCES users (id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
Reference in New Issue
Block a user