[FEAT] #384 p.6 — Matrice RACI sulle policy + R/A obbligatorie in approvazione
Sezione 'Matrice RACI' nel dettaglio policy: assegnazione ruoli organigramma (org_roles) alle responsabilita R/A/C/I via infrastruttura RACI esistente (raci_assignments, object_type='procedure'). In bozza libera; PolicyController::approve ora richiede almeno un ruolo R e uno A (422 RACI_REQUIRED). Nessuna migrazione. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
cb238e8380
commit
99bd293745
@@ -237,6 +237,25 @@ class PolicyController extends BaseController
|
||||
{
|
||||
$this->requireOrgRole(['org_admin']);
|
||||
|
||||
// Ticket #384 punto 6 — gate RACI: in approvazione R e A sono obbligatorie
|
||||
// (in bozza l'assegnazione resta libera). Usa l'infrastruttura RACI esistente
|
||||
// (raci_assignments, object_type='procedure' -> policy_id). Decisione di design
|
||||
// del richiedente super_admin: NON e' un vincolo normativo, e' una regola di prodotto.
|
||||
$assignedRaci = Database::fetchAll(
|
||||
"SELECT DISTINCT raci FROM raci_assignments
|
||||
WHERE organization_id = ? AND object_type = 'procedure' AND object_id = ?",
|
||||
[$this->getCurrentOrgId(), $id]
|
||||
);
|
||||
$present = array_column($assignedRaci, 'raci');
|
||||
$missing = array_values(array_diff(['R', 'A'], $present));
|
||||
if (!empty($missing)) {
|
||||
$this->jsonError(
|
||||
'Per approvare la policy assegna nella Matrice RACI almeno un ruolo ' . implode(' e uno ', $missing) . '.',
|
||||
422,
|
||||
'RACI_REQUIRED'
|
||||
);
|
||||
}
|
||||
|
||||
Database::update('policies', [
|
||||
'status' => 'approved',
|
||||
'approved_by' => $this->getCurrentUserId(),
|
||||
|
||||
Reference in New Issue
Block a user