Como desenvolver Várias Sistemas em uma unico Banco

Boa tarde!

Gostaria de receber uma orientação de boas praticas no desenvolvimento no Scriptcase.

Tenho um grupo de sistemas que compartilha o mesmo banco de dados. Como procedo no Scriptcase?
01 - Na criação dos projetos direciono para o mesmo banco de dados? Tipo crio projeto01 para o bancosql, crio o segundo projeto direcionando para a mesma base… assim por diante?

02 - Se cada projeto terei criaando em bancos separados? Como será a publicação de cada sistema?

Estou perdido nesta situação.

Os sistemas de complementam?
São interdependentes?

Se complementam.
Utilizando a mesma tabela de usuário para liberar as aplicação de cada projeto.
Sistema de Gestão da Qualidade (Projeto Principal)
Os projetos secundários:

  • Auditoria
  • Gestão de Frota
  • Gestão de Documentos
  • Central de Relacionamento
  • etc
    O objetivo principal é utilizar a mesma tabela de usuarios para liberaçao de acesso aos sistemas.

Isto é possivel?

Então utilize o mesmo banco.
De prefixos as aplicações conforme o solicitado e publique na mesma pasta.

Ser for um pacote poderia controlar nos grupos / aplicação, colocaria a opção do menu para esconder itens, o usuário acessaria o sistema e só apareceria o que for determinado no grupo dele

Pode ter um projeto só.
Use as permissões para liberar o que cada grupo pode acessar ou mesmo usuários específicos.
Criar vários projetos para acessar a mesma base… Não entendi porque separar?

Aqui já separei um Sistema em vários projetos pela questão de organizar melhor por assunto e equipes de desenvolvimento cada um focado em um projeto distinto (no que tange a SC apesar de pertencerem ao mesmo sistema).

Meu produto hoje é ERP (nome inapropriado mas é como o mercado conhece).
É dividido em módulos cada módulo é um projeto separado no SC.

Segurança&Acesso (atende a outros sistemas)
Financeiro
Suprimentos
Vendas
Faturamento
Cadastros Básicos
Estoques

A gestão do desenvolvimento ficou mais fácil quando subdividi em projetos (módulos).

1 Curtida

Entendi Haroldo.
Pensando assim será melhor.

1 Curtida

Quando eu crescer quero ser igual…rsrs

Haroldo, como faz com o acesso inicial, voce cria sem index?

estava pensando em fazer um de gestão nestes moldes, menu pensei em nomes diferentes tipo menu_cobranca, menu_ativos / menu_inativos e u com todos menu_gestao.

Cada um teria seus acessos que controlaria pelos usuários, aplicações/grupos, poderiam estar em um ou mais grupos, só o acesso inicial pensei em na index colocar um logo ou uma imagem para cada aplicação, cada um teria seu local de acesso, conforme acima, o mais pratico seria na index principal e dela subdividir, mas não pensei em nada alem de diretórios diretos ou o esquema de links, como fez? (se puder passar a logica deste inicio, claro)

1 Curtida

Esse é um assunto extenso a se discutir.

O sistema de segurança é independente.
Conforme o contrato com o cliente (exemplo se esse cliente contratou sistema de clinicas) o menu de clinicas é aberto com os módulos de clinicas (cadastros, agendamento, financeiro, faturamento, segurança, suporte) , cada módulo abre o sub menu do módulo.
Todos os menus são dinâmicos.

Se o cliente tem contrato com ERP, a segurança chama o mesmo menu que vai montar os itens referentes aos módulos do ERP.

Todos os projetos são publicados na mesma pasta.
Cada aplicação tem como prefixo: Sigla do Sistema + Sigla do Módulo + _ + nome_app +_+ tipo_app
Exemplo: erpcad_clientes_grid, erpcad)clientes_form.

A segurança é baseada na tabela usuários (este tem um campo do tipo json com os ids das empresas que ele tem acesso). O login chama tela para seleção da empresa que por sim chama a tela de menu principal (que monta dinamicamente os itens par acesso aos módulos do sistema contratado).

O Cadastro do usuário possui um campo do tipo json com todas aplicações que tem acesso e quais funções internas pode utilizar (inclusão, deleção, alteração no caso de formulários).
Então na segurança tem 2 tabelas : Usuários e Aplicações. No código de cada aplicação eu tenho propriedades internas que determina os módulos a qual essa app pertence. Pode se dar acesso a um usuário determinando o módulo, acessando todas aplicações desse módulo, podendo depois excluir e/ou alterar aplicações e funções de acesso, como se pode dar acesso a aplicações aleatoriamente. Tudo fica dentro de um único campo to tipo json (https://mariadb.com/kb/en/library/json-functions/).
Então não há cadastro de grupos de permissões, os módulos são pré-definidos. Isso facilita o cliente criar seus usuários de acesso e dar as permissões sem complexabilidade.
O uso de campos json evita criação de tabelas tipo grupos, grupos_x_usuarios, grupos_x_aplicações.

Como todas aplicações de módulos diferentes e sistemas diferentes estão publicados na mesma pasta fica tudo funcional. Um prod somente, um sistema de login e segurança único gerenciando sistemas diferentes com diversos módulos.

O Login possui uma opção de auto login, ou seja, uma vez habilitada, após o primeiro login, a app guarda com cookies os dados criptografados do usuário, no próximo login o sistema entra automático e vai direto para o menu principal da última empresa acessada. A troca de empresa se da por uma app no sistema (que recarrega o menu principal salvaguardando a empresa corrente e fechando todas as apps abertas antes da troca da empresa. O primeiro login do dia é obrigatório ele se torna automático partir do segundo login do dia. A opção para sair do sistema e forçar o login novamente.

O sistema todo está em 2 banco de dados:

  • Master (gerencia meus contratos, suporte)
  • Banco de dados do Sistema (erp, clinicas, veículos, escolas, suporte, etc) gerencia os dados dos clientes

Praticamente todas as regras de negócios estão no banco de dados (triggers, stored procedures, functions, events ‘a dar com pau’). Até os logs é o próprio banco quem cria, nada do lado da aplicação.

Em resumo, essa é a metodologia que aplico.

2 Curtidas

Bem complexo, algumas coisas anotei aqui como ideias.
Obrigado pelo seu tempo em explicar

1 Curtida

Jair,
Concordo com voce… bem complexo. Mas desafiador.

Haroldo… obrigado pela sua contribuição. Eu estou tentando imaginar como iniciar este projeto.

Mas pelos recursos atuais do ScriptCase: grupos, grupos_x_usuarios, grupos_x_aplicações, é possível desenvolver? Quais os passos de desenvolvimento?

01 - Gero primeiro projeto na base001… Gere a regra de segurança deste projeto.
02 - Gero o segundo projeto na mesma base …Gero a regra de segurança deste projeto…

1 Curtida

Sim claro que é possível.
Inicie gerando o projeto de segurança.
Depois cria a tabela de empresas e usuarios_x_empresas.
Crie relação NxN na app que cadastra usuários usando duplo select com a tabela de empresas e usuarios_x_empresas
No login assim que informar o usuário faça uma recarregamento Ajax em um campo select na tabela usuarios_x_empresas com INNER Join na empresa para apresentar o nome da mesma. Após senha e validar a autenticação guarde o id da empresa em uma global de sessão.

Não gera a segurança em cada projeto. Você cria um projeto somente para segurança e publica na mesma pasta.

Haroldo,
O projeto principal executo o módulo de segurança, e nos projetos seguintes… executo de novo? Ou SC alimenta a tabela de aplicação automaticamente?

Última duvida: Qual a orientação para que cada projeto possui uma tela de login também compartilhando a mesma base de dados?
:crazy_face:

Conforme a empresa você vai desviar o login para o menu de cada sistema.
A inclusão das aplicações na base de dados de segurança se dá através de uma app da segurança que faz sincronismo. Ela varre todos os diretórios e inclui as aplicações na base de dados.

Boa Tarde @InfinitusWeb, o app de segurança que você esta falando se da pelo programa criado pelo proprio scriptcase no modulo de segurança ou você criou algo especifico para esta finalidade ?

Estou trabalhando em um projeto parecido com o que foi abordado aqui, queria entender melhor

Sim claro que é possível.
Inicie gerando o projeto de segurança.
Depois cria a tabela de empresas e usuarios_x_empresas.
Crie relação NxN na app que cadastra usuários usando duplo select com a tabela de empresas e usuarios_x_empresas
No login assim que informar o usuário faça uma recarregamento Ajax em um campo select na tabela usuarios_x_empresas com INNER Join na empresa para apresentar o nome da mesma. Após senha e validar a autenticação guarde o id da empresa em uma global de sessão.

Não gera a segurança em cada projeto. Você cria um projeto somente para segurança e publica na mesma pasta.

1 Curtida

SIM.
Não sei qual é o teu banco de dados, mas no PostgreSQL isso se resolve usando Schemas.
São esquemas hierárquicos dentro do mesmo banco de dados.
Ex:
Schemas:
Contabilidade
Folha de Pagamento
ERP
CRM
etc, etc…