[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Renato Vieira
Criador Renato Vieira 30/03/2022

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

Manager Carlos Ferreira 30/03/2022

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?

Carlos Ferreira
Criador Renato Vieira 30/03/2022

vou tentar, obrigado, qualquer coisa eu peço ajuda.

Obrigado

Renato Vieira
Criador Renato Vieira 30/03/2022

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

Renato Vieira
Manager Carlos Ferreira 30/03/2022

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?

Carlos Ferreira
Criador Renato Vieira 30/03/2022

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.

 

Renato Vieira
Manager Carlos Ferreira 30/03/2022

Já tem funcionando a relação de usuário x filial?

Carlos Ferreira
Criador Renato Vieira 30/03/2022

ola, boa noite Carlos, já sim...

Renato Vieira
Manager Carlos Ferreira 30/03/2022

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);

Carlos Ferreira
Criador Renato Vieira 30/03/2022

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

 

 

Renato Vieira
Manager Carlos Ferreira 30/03/2022

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;

Carlos Ferreira
Criador Renato Vieira 30/03/2022

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.

 

Renato Vieira
Manager Carlos Ferreira 30/03/2022

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

Carlos Ferreira
Criador Renato Vieira 30/03/2022

sim, entendi, o problema maior mesmo são as outras partes...

Renato Vieira
Manager Carlos Ferreira 30/03/2022

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.

Carlos Ferreira
Criador Renato Vieira 30/03/2022

boa tarde Carlos, tudo bem?

vou fazer isso sim, se não conseguir hoje amanha eu faço

obrigado

Renato Vieira
Manager Carlos Ferreira 30/03/2022

Tá bom, vou encerrar essa thread, qualquer coisa continuamos no e-mail;

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!