Saludos, este es un tema muy importante y para mi caso no no lo he podido implementar, estoy tratando de desarrollar un sistema multi-Empresa con Symfony 3.4, para varias universidades, quiero mantener un solo fuente con múltiples base de datos que poseen estructura idéntica con una tabla de usuarios en cada base de datos, por lo tanto no puedo usar una base de datos para autenticar y luego seleccionar la base de datos de la universidad,
Cada base de datos tiene la información de cada universidad con sus respectivos usuarios, la idea es que en la pantalla de login el usuario coloca su correo y clave y selecciona la universidad a la que pertenece y yo programe que el sistema se conecte al entity manager que corresponda sin embargo el objeto que guarda el token y la autenticacion del usuario siempre apunta a la conexión de base de datos por defecto que se debe coloca en el config.yml. Aunque internamente construí una función que autentica con la tabla de usuarios de la base de datos que corresponde y genero el token correcto , al hacer el primer request este token generado por mi se pierde y el sistema automáticamente genera un nuevo token y se trae la data de usuario que de la base de datos por defecto del config.yml
Es por ello, que intente de cambiar dinamicamente el parámetro default_connection creando una variable parametro multisede que guarda el nombre de las conexión que corresponde con las creadas en parameters.yml.
Igualmente hice un llamado del archivo multisede.php donde cargo dinamicamente el parametro multisede con la conexión de base de datos correcta pero se sigue perdiendo la autencación y toma siempre los datos de la tabla de usuario de la base de datos por defecto.
Ejemplo config.yml
imports:
{ resource: parameters.yml } { resource: multisede.php } { resource: security.yml } { resource: services.yml } doctrine: dbal: default_connection: '%multisede%' .. .. orm: default_entity_manager: '%multisede%' entity_managers: caracas: connection: caracas mappings: AppBundle: ~
barqto: connection: barqto mappings: AppBundle: ~ Ejemplo de multisede.php
<?php use Symfony\Component\HttpFoundation\Session\Session; $session = new Session();
// variable de session que guarda el nombre de la conexion de base de datos ya sea caracas, mejoramiento, barto, maturin etc.
$multisede=$session->get('em');
// cuando se hace el login se coloca por defecto caracas if ($multisede==null){ $multisede='caracas'; $container->setParameter('multisede', $multisede);
// cuando se hace login y se selecciona la universidad se coloca la base de datos ya sea barto, maturin,caracas }else{ $container->setParameter('multisede', $multisede);
}
Agradecería la ayuda que me puedan prestar.. Gracias
Respuestas
Por qué no usar una misma base de datos? Si es mucha la carga, configura un ambiente master-slave entre varios SGBD y resuelto el problema.
@Frizquierdo1987