mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
V 1.003 Accès par MIRADOR sur deux environnements
This commit is contained in:
@@ -1,12 +1,39 @@
|
||||
<?php
|
||||
function getDbConnection(): PDO
|
||||
{
|
||||
$host = getenv('DB_HOST') ?: 'mysql';
|
||||
$db = getenv('DB_NAME') ?: 'crm';
|
||||
$user = getenv('DB_USER') ?: 'crm_user';
|
||||
$pass = getenv('DB_PASS') ?: '';
|
||||
/**
|
||||
* ASPIC — db.php
|
||||
* Connexions PDO de l'application.
|
||||
*
|
||||
* ⚠️ Mise en place de MIRADOR (30 août 2026, voir journal de développement) :
|
||||
* deux connexions distinctes désormais.
|
||||
*
|
||||
* - getRouterConnection() : connexion fixe vers MIRADOR (base d'authentification
|
||||
* centralisée, table MIR_Users), sur l'instance de routage dédiée
|
||||
* (ROUTER_DB_HOST). N'est appelée que par aspic.php, à l'identification.
|
||||
*
|
||||
* - getDbConnection() : connexion vers la base de travail réelle. Si la
|
||||
* session en cours porte des coordonnées de routage (posées par aspic.php
|
||||
* juste après vérification contre MIRADOR — host/port/base propres à
|
||||
* l'utilisateur connecté, voir $_SESSION['ASPIC_DB_HOST'] et consorts),
|
||||
* c'est cette base précise qui est ouverte : deux utilisateurs connectés
|
||||
* en même temps peuvent donc parfaitement travailler sur deux bases
|
||||
* différentes (MS-DEV, MS-TST, ou une base de bêta testeur plus tard).
|
||||
* À défaut de session exploitable (scripts publics sans authentification,
|
||||
* ex. prospects_core.php — voir journal, section 18), on retombe sur la
|
||||
* base par défaut du conteneur (DB_HOST/DB_NAME), exactement comme avant
|
||||
* MIRADOR.
|
||||
*
|
||||
* Le compte technique MySQL (DB_USER/DB_PASS) est le même sur toutes les
|
||||
* instances (mysql/mysql2/mysql3 — droits complets sur toutes les bases que
|
||||
* chacune héberge, voir journal). Une seule paire d'identifiants suffit donc
|
||||
* pour ouvrir n'importe laquelle des connexions ci-dessus, MIRADOR compris
|
||||
* (ROUTER_DB_USER/ROUTER_DB_PASS — valeurs dupliquées à l'identique de
|
||||
* DB_USER/DB_PASS côté docker-compose, mais des variables distinctes pour
|
||||
* ne jamais mélanger accidentellement les deux usages).
|
||||
*/
|
||||
|
||||
$dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4";
|
||||
function ouvrirConnexionPdo(string $host, string $db, string $user, string $pass, int $port = 3306): PDO
|
||||
{
|
||||
$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=utf8mb4";
|
||||
$options = [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
@@ -14,3 +41,37 @@ function getDbConnection(): PDO
|
||||
|
||||
return new PDO($dsn, $user, $pass, $options);
|
||||
}
|
||||
|
||||
function getDbConnection(): PDO
|
||||
{
|
||||
// Routage dynamique posé par aspic.php à l'identification (MIRADOR) :
|
||||
// prioritaire dès qu'une session valide le porte.
|
||||
if (session_status() === PHP_SESSION_ACTIVE && !empty($_SESSION['ASPIC_DB_HOST'])) {
|
||||
return ouvrirConnexionPdo(
|
||||
$_SESSION['ASPIC_DB_HOST'],
|
||||
$_SESSION['ASPIC_DB_NAME'],
|
||||
getenv('DB_USER') ?: 'crm_user',
|
||||
getenv('DB_PASS') ?: '',
|
||||
(int) ($_SESSION['ASPIC_DB_PORT'] ?? 3306)
|
||||
);
|
||||
}
|
||||
|
||||
// Repli : base par défaut du conteneur, inchangé depuis avant MIRADOR —
|
||||
// utilisé par les scripts publics sans session (prospection).
|
||||
$host = getenv('DB_HOST') ?: 'mysql';
|
||||
$db = getenv('DB_NAME') ?: 'crm';
|
||||
$user = getenv('DB_USER') ?: 'crm_user';
|
||||
$pass = getenv('DB_PASS') ?: '';
|
||||
|
||||
return ouvrirConnexionPdo($host, $db, $user, $pass);
|
||||
}
|
||||
|
||||
function getRouterConnection(): PDO
|
||||
{
|
||||
$host = getenv('ROUTER_DB_HOST') ?: 'mysql2';
|
||||
$db = getenv('ROUTER_DB_NAME') ?: 'MIRADOR';
|
||||
$user = getenv('ROUTER_DB_USER') ?: 'crm_user';
|
||||
$pass = getenv('ROUTER_DB_PASS') ?: '';
|
||||
|
||||
return ouvrirConnexionPdo($host, $db, $user, $pass);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user