Aplicativo Laravel 5 Multilocação com bancos de dados separados - os usuários têm acesso a várias instalações

Nos últimos anos, desenvolvi um aplicativo PHP / MySQL muito personalizado, usado para vários clientes. Eu tenho criado um novo banco de dados e uma nova instalação para cada cliente até este ponto.

O primeiro problema óbvio aqui é manter várias instalações atualizadas com qualquer alteração de código; um segundo problema é que cada instalação possui uma grande quantidade de usuários; e para a maioria dos clientes; alguns desses usuários são iguais - e eles precisam ter várias contas e URLs de usuários separados para serem lembrados.

Estou transferindo o aplicativo para o Laravel 5 no momento e procurando a melhor implementação para multilocação; procurando um pequeno conselho sobre a melhor implementação. Já usei o Laravel antes, mas não sou especialista em nada.

Isto é o que eu estou pensando, tanto quanto a instalação.

1 banco de dados mestre que contém tabelas para:

Todas as informações da conta de usuárioTabela de controle de acesso - quais instalações os usuários podem acessar; qual é o nível de usuário nessa instalação.Tabela de configuração para cada instalação - informações de conexão com o banco de dados, configuração básica etc.

Em seguida, um banco de dados separado para cada instalação que contém todas as informações necessárias e enviadas a essa instalação.

A configuração ideal é que um usuário possa acessar um subdomínio, por exemplo, nome_da_instalação.nome_do_app; entre com seus detalhes de login mestre e vá automaticamente para a instalação necessária; OU acesse appname.com, entre e selecione a qual instalação se conectar.

Minhas perguntas são:

Esse é o melhor arranjo para alcançar o que estou procurando?Qual é o melhor método para armazenar para qual instalação o usuário está olhando (variável de sessão)Posso definir um modelo entre 2 bancos de dados - talvez defina uma conexão como conexão mestre e, em seguida, defina dinamicamente outra conexão usando as informações de conexão com o banco de dados no banco de dados mestre para conectar-se à instalação correta. - o sistema frequentemente precisará verificar as informações do usuário quanto ao nível de acesso etc.

Tenho certeza de que há muitos problemas em que não pensei; mas se alguém tiver links ou orientações que possam ajudar, isso seria ótimo. Primeira vez que fiz uma pergunta sobre SO, mas encontrei uma enorme quantidade de ajuda de pesquisa aqui no passado, então, graças à comunidade!

ATUALIZAÇÃO - Então acho que tenho uma maneira de fazer isso funcionar agora; usando bancos de dados separados como acima; conjunto

protected $connection = 'tenant_connection'

nos modelos relacionados ao conteúdo do banco de dados específico do inquilino.

Em algum lugar de um arquivo de cabeçalho, defina o tenant_connection desejado com base em uma variável de sessão que foi configurada no login / por subdomínio.

$tenant = Installation::where('installation', '=', $session['installation'])->first();
Config::set('database.connections.tenant_connection', array('driver' => 'mysql', 'host' => $tenant->db_hostname, 'username' => $tenant->db_username)... etc.

Supondo que os relacionamentos funcionem entre conexões; Não vejo por que isso não funcionaria; só precisa descobrir o melhor local para definir a conexão do inquilino.

questionAnswers(3)

yourAnswerToTheQuestion