NF
Framework e modelo ER multi empresa
Fechado
Olá,
É a primeira vez que participo do fórum, então, se caso esteja procedendo de forma errada, peço que me corrijam.
Tenho um modelo ER que é multi empresa, ou seja, quase 100% das tabelas (clientes, fornecedores, produtos, etc) tem seus dados vinculados a uma e somente uma empresa. Cada um de meus clientes acessará uma destas empresas, ou seja, somente podem visualizar os seus dados (company_id=?) e não tem acesso às demais empresas ou dados vinculados à elas. Com isso, na escala de centenas de clientes, procuramos evitar a criação de centenas de bancos de dados no Postgres da hospedagem.
Minha pergunta é: estamos gerando os formulários pelo Studio. No entanto, visto que cada cliente somente terá acesso à somente sua empresa, é um tanto redundante colocar em todas as telas, como mestre, a empresa, trazendo como detalhe os dados (clientes por exemplo). Como tratar isso no framework, ou seja, como fazer com que seja incorporado ao WHERE na camada do banco o teste que precisamos: COMPANY_ID=10 por exemplo.
A primeira ideia que me ocorre é adicionar no formulário em questão, clientes por exemplo, um campo do tipo THIDDEN ($company_id = new THidden('company_id') ... preenchendo esta informação no caso das novas inclusões. E no caso de pesquisas e filtros, igualmente utilizando este recurso para que o framework considere esta informação no momento de traduzir isso em um WHERE final.
Aceito sugestões.
Abraço
É a primeira vez que participo do fórum, então, se caso esteja procedendo de forma errada, peço que me corrijam.
Tenho um modelo ER que é multi empresa, ou seja, quase 100% das tabelas (clientes, fornecedores, produtos, etc) tem seus dados vinculados a uma e somente uma empresa. Cada um de meus clientes acessará uma destas empresas, ou seja, somente podem visualizar os seus dados (company_id=?) e não tem acesso às demais empresas ou dados vinculados à elas. Com isso, na escala de centenas de clientes, procuramos evitar a criação de centenas de bancos de dados no Postgres da hospedagem.
Minha pergunta é: estamos gerando os formulários pelo Studio. No entanto, visto que cada cliente somente terá acesso à somente sua empresa, é um tanto redundante colocar em todas as telas, como mestre, a empresa, trazendo como detalhe os dados (clientes por exemplo). Como tratar isso no framework, ou seja, como fazer com que seja incorporado ao WHERE na camada do banco o teste que precisamos: COMPANY_ID=10 por exemplo.
A primeira ideia que me ocorre é adicionar no formulário em questão, clientes por exemplo, um campo do tipo THIDDEN ($company_id = new THidden('company_id') ... preenchendo esta informação no caso das novas inclusões. E no caso de pesquisas e filtros, igualmente utilizando este recurso para que o framework considere esta informação no momento de traduzir isso em um WHERE final.
Aceito sugestões.
Abraço
Tenho um sistema que funciona assim.
A primeira coisa que tem q fazer é implementar no controle de acesso o iID da empresa, que o mesmo pertence..... e nas query de filtros sempre especificar nas cláusula WHERE o ID_EMPRESA = ID_EMPRESA_USUARIO_SESSAO
Nas inclusões no método onSave sempre atribuir $obj->ID_EMPRESA = ID_EMPRESA_USUARIO_SESSAO.
att
www.adianti.com.br/forum/pt/view_1934?como-criar-sistema-multi-empre
www.adianti.com.br/forum/pt/view_2598?framework-e-modelo-er-multi-em
www.adianti.com.br/forum/pt/view_2619?multi-empresas-com-o-adianti-f
www.adianti.com.br/forum/pt/view_1263?como-fazer-projeto-por-empresa
Boa tarde!
Madson Silva,
poderia exemplicar os onde coloco os codigos para filtrar o ID session do login do usuario e depois onde inserir o $obj-> ID_EMPRESA = ID_EMPRESA_USUARIO_SESSAO ???
pode ajudar por gentileza.
Meu nobre
No loginFom no metodo onLogin() após a validação do usuário
TSession::setValue(' ID_EMPRESA_USUARIO_SESSAO',VAR_QUE_INDENTIFICA_A_EMPRESA);
Um detalhe, vc tem q ter um campo identificador na tela de login..... ou teu sistema tem q trabalhar com login único idenpendente da empresa e pega a identificação do prorpio objeto login.
Observação..... a Versão 5 do Adianti vem com um exemplo bem prático