Base de travail V7.8 reprise du répertoire de travail
Commit technique : reproduit à l'identique l'état non commité de la copie de travail (sécurisation V7.8, CSP à nonce, Session, migration des droits) afin que le travail d'ergonomie qui suit soit isolable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -78,5 +78,43 @@ final class SchemaModel extends BaseModel
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
$this->assertAccessViews();
|
||||
}
|
||||
|
||||
/**
|
||||
* Les vues d'accès portent l'intégralité des règles de droits. Si elles
|
||||
* manquent, l'application doit refuser de démarrer plutôt que de tourner
|
||||
* sans contrôle de périmètre.
|
||||
*/
|
||||
private function assertAccessViews(): void
|
||||
{
|
||||
$requiredViews = [
|
||||
'v_acces_role_page',
|
||||
'v_acces_role_permission',
|
||||
'v_acces_identite_agent',
|
||||
'v_acces_identite_structure',
|
||||
'v_acces_agent_par_structure',
|
||||
'v_acces_perimetre_creneau',
|
||||
'v_acces_perimetre_planning',
|
||||
];
|
||||
|
||||
$placeholders = implode(',', array_fill(0, count($requiredViews), '?'));
|
||||
$stmt = $this->pdo->prepare(
|
||||
"SELECT TABLE_NAME
|
||||
FROM information_schema.VIEWS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME IN ($placeholders)"
|
||||
);
|
||||
$stmt->execute($requiredViews);
|
||||
$missing = array_values(array_diff($requiredViews, $stmt->fetchAll(\PDO::FETCH_COLUMN)));
|
||||
|
||||
if ($missing) {
|
||||
throw new \RuntimeException(
|
||||
'Contrôle d’accès indisponible : vue(s) manquante(s) : '
|
||||
. implode(', ', $missing)
|
||||
. '. Exécutez database/migration_v7_8_securite_acces.sql.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user