Mudança de tenant
[Concluído]
Boa noite Carlos,
Mais um problema, rsrs
Seguinte, eu vou ter o controle tenant nos usuários também, ou seja, terei varias filias, e cada filial teria seu s usuários, e esse usuário pode enxergar apenas dados de sua filial, até ai tudo bem, porem terei alguns usuario que poderação ter acesso a outra filiais, mas não querem deslogar e logar com outro usuário, o que preciso é que o usuário X que é usuário da filial 1 (tenant) por exemplo, que é um usuário super blaster mega plus usuário, possa em tempo de execução mudar de filial, ou seja, pare de ver informações de sua filial e passe a ver as informações apenas da fiiial que selecionou.
Eu pensei no seguinte, quando for esse super usuário, no Dashboard tenha um botão ou um select que ele possa mudar de filial, pensei no Dashboard para não ter nenhum cadastro, relatório, etc, aberto mostrando dados da filial, ai a partir desse momento ele passe a ter infomações apenas dessa outra filial escolhinha.
Mas ai cai num enrosco, como controlar em todas telas que o tenant dele não é mais o 1 e sim o 3 por exemplo, acho que terei que mexer em todos controle para não mais pegar o tenant dele e sim do que ele mudou correto? lembrando que o tenant padrão dele será sempre o que esta no usuario dele.
Sra que da certo assim, o ID do tenant fica sempre em memoria igual o usuario autenticado, tem como eu mudar esse valor do ID do tenant apenas na memoria, se sim acho que resolve meu problema né, rsrs
obrigado
Olá, Renato!
Tudo bem?
Primeiro ponto, você precisa ter um relacionamento de N:N entre usuário, e filiais, para dizer qual(is) filiais o usuário tem relação.
Feito isso, tem alguns caminhos a seguir, um deles, é após o usuário se autenticar, você lista todas as filiais que ele tem relação, ao escolher uma filial, você salva em cache, e com isso você já tem o tenant setado na sessão. E se ele precisar trocar de tenant (filial), basta deixar um menu por exemplo com as filiais que ele tem acesso, e no momento que selecionar outra, você atualiza a sessão com a filial;
Pegou a ideia amigo?
vou tentar, obrigado, qualquer coisa eu peço ajuda.
Obrigado
Boa tarde Carlos, tudo bem
Eu já utilizo o tentant certinho de acordo com o Curso Laravel Multi-Tenancy Single Database, fiz do jeitinho que fez na aula e funciona perfeito, o problema é, quando o tipo de usuário for admin, ele tem acesso a todas filiais, ai listo as filiais de acordo com o que falou, ai ele muda para a filial desejada, ai ele , só pode ver, e gravar coisas naquela filial, não mais no tenant que esta no meu usuário.
como que o sistema vai entender que mesmo meu usuário for do tenant 1. eu posso incluir um paciente na filial 2, ou seja, meu tenant é 1, mas a beneficiário tem que cair no tenant 2, ou 3, ou etc.
não entendi como mudo em cache / sessão
obrigado
Certo, então vamos passo à passo.
Onde você está com o projeto neste exato momento?
Quando o usuário acessa o sistema, vc já consegue exibir para ele as filias que ele tem acesso?
estou no inicio, pois acredito que tenho que ajustar isso agora, pra não precisar voltar depois ao inicio novamente
já logo no sistema, cadastro usuários, perfil, departamento, e cargo. tudo isso já com controle de tenant.
Já tem funcionando a relação de usuário x filial?
ola, boa noite Carlos, já sim...
Próximo passo, listar as filiais do usuário, logo após ele se autenticar.
Tranquilo isso?
---
Feito isso, próximo passo, criar um middleware que vai garantir que o usuário escolheu uma filial:
if (!session('filial')) {
return route('admin.escolher.filial');
}
Esse middleware deve ser aplicado nas rotas do seu dasbhoard (admin);
---
Quando o usuário escolher uma filial, você joga as informaçõeso dela para a sessão:
$filial = '...';
session()->put('filial', $filial);
boa tarde Carlos, tudo bem?
Amigo, estou até com vergonha, mas comecei aprender php/laravel e afins a pouco tempo atras, ai tenho varias duvidas ainda e acabo apanhando em coisas boba.
---
Próximo passo, listar as filiais do usuário, logo após ele se autenticar.
eu não consegui decobrir como fazer isso, pois o login dele é bem complicado, manda para um punhado de programa.
--
Feito isso, próximo passo, criar um middleware que vai garantir que o usuário escolheu uma filial:
if (!session('filial')) {
return route('admin.escolher.filial');
}
Esse middleware deve ser aplicado nas rotas do seu dasbhoard (admin);
aqui acho que tudo bem!
--
Quando o usuário escolher uma filial, você joga as informaçõeso dela para a sessão:
$filial = '...';
session()->put('filial', $filial);
esse não sei onde implementar
--
Eu coloquei na parte de cima do isede qual filial estou conectado, a minha ideia seria, entrar na filial que esta no tenant_id do usuario que logou, ai se o o campo user_type do usuario logado for 1 "Master" eu mostro um botão para ele escolher qual filial ele bai trabalhar. isso acho que entendeu-ne?
eu coloquei o github do projeto abaixo caso queria dar uma olhada
https://github.com/rsvieira70/sgco.git
Sua ideia está correta, se o usuário for o master, você lista as filiais para ele.
Vamos ao fluxo:
Usuário loga no sistema
- É master?
Não - Continua com o tenant default (igual está no curso)
Sim
- Redireciona para a tela onde vai listar as filiais deste usuário master
- Ao listar as filiais, o usuário master, escolhe uma filial
- Você pega essa filial escolhida, e armazena ela na sessão session()->put('filial', $filial);
Criar o middleware, é tranquilo para você?
Trabalhar com sessão?
Me diz ae para mim saber o seu nível técnico e ficar mais fácil a nossa comunicação;
Bom dia Carlos
o Fluxo seria quase isso que passou, mas com uma alteração
Usuário loga no sistema
- É master?
Não - Continua com o tenant default (igual está no curso);
- Não tem direito a trocar de Tenant.
Sim - Continua com o tenant default (igual está no curso);
- na Dashboard tera um botão que poderá trocar de Tenant, sem deslogar (só aparece ou entra na pagina se for Master);
- Clicando nele Redireciona para a tela onde vai listar as filiais;
- Ao listar as filiais, o usuário master, escolhe uma filial;
- Você pega essa filial escolhida, e armazena ela na sessão session()->put('filial', $filial);
-o TenantTrait tem que entender que agora o Tenant é o escolhido e não o do usuário.
Repondendo as questoes
Criar o middleware, é tranquilo para você? Não, criei alguns só, mas tenho bastante dificuldade
Trabalhar com sessão? Não
Me diz ae para mim saber o seu nível técnico e ficar mais fácil a nossa comunicação;
Eu comecei a trabalhar com PHP/laravel a pouco tempo, estou aprendendo bastante com o seu curso, mas bem cru ainda. tenho uma vasta experiencia de 32 anos em programação, mas em cobol, totalmente diferente.
Tipo, usuário é master, vai ter um menu a mais onde ele vai pode trocar de filial.
Aqui, primeiro ponto, você pode usar ACL ou mesmo um middleware, para garantir que apenas usuários master terão acesso a esses recursos (ver as filiais).
--
Uma aula sobre middlewares no Laravel: https://www.youtube.com/watch?v=YwHRSe9_zpI
Outra aula mais atualizada: https://www.youtube.com/watch?v=nqcik4VyluE
sim, entendi, o problema maior mesmo são as outras partes...
Essa thread aqui já está ficando bem longa, faz o seguinte amigo.
Me diga exatamente onde travou, mas para isso vou te direcionar para outro canal de atendimento, encaminha essa dúvida com todos os detalhes para o e-mail [email protected] que vou te orientar baseado em minha experiência com o assunto.
boa tarde Carlos, tudo bem?
vou fazer isso sim, se não conseguir hoje amanha eu faço
obrigado
Tá bom, vou encerrar essa thread, qualquer coisa continuamos no e-mail;
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!