1
resposta

Modelagem de Tabelas

Preciso de uma modelagem de um banco para um sistema de app, web, e admin.

Vão ser 3 tipos de usuários sendo dois deles com vários níveis diferente.

1- Usuário do App ( esse usuário só pode acessar o app com a sua conta). 2- Usuário do Admin ( esse usuário pode acessar todas as camadas da aplicação, tanto App, Admin, e Web. Esse tipo de usuário vai ter vários tipos de níveis, como por exemplo editor, administrador, técnico e etc). 3- Usuário da Web ( esse usuário só pode acessar a web com a sua conta. Esse tipo de usuário vai ter vários níveis editor, administrador, técnico e etc ).

A minha duvida é a seguinte, mantenho tudo em uma mesma tabela ? e coloco níveis diferentes para cada um ? Por exemplo.

Nível 1 = App
Nível 2 = Web | Editor
Nível 3 = Web | Técnico
Nível 4 = Web | Administrador
Nível 5 = Admin | Editor
Nível 6 = Admin | Técnico
Nível 7 = Admin | Administrador

E eu poderia somente fazer a validação no back, caso aquele usuário tenha o nível de usuário X ele pode acessar. No meu ponto de vista isso ficaria mais organizado, pois terão tabelas no banco do mesmo tipo como por exemplo Endereço, que tem os mesmos dados não importa o nível de usuário. Ai eu usuária somente uma tabela Users e uma Tabela Address.

A outra forma que pensei era criar 2 tabelas diferentes, deixando 1 apenas para os usuários do App, e a outra somente para o WEB e Admin. Porém eu iria ter que criar 2 tabelas Address. Já que o banco é relacional ! Lembrando que não seria somente a tabela address teriam diversas tabelas com o mesmo tipo de dados.

Gostaria de saber em questão de performance e segurança qual dos dois tipos seria mais adequado, ou até mesmo se tiver outra forma de fazer que não citei aqui. Qual é o mais utilizados nas empresas de tecnologias hoje ? Qual é o melhor método ? Vou estar lidando com uma quantidade imensa de dados !

Não sei se estou correto, mas caso eu faça em uma tabela só aparentemente não vai ser performático pois irá aumentar o número de dados em uma tabela só e caso haja um vazamento de dados, literalmente todos os dados estariam comprometidos.

Desde já agradeço.

1 resposta

De acordo com o que eu entendi, você vai criar uma tabela única de usuários. Se cada usuário pode ser de apenas um tipo (app, web, e admin), você pode guardar essa informação na tabela de usuários.

Desta forma, se você precisar guardar outras informações, como endereço ou telefone, poderá vincular com a tabela de usuários, num relacionamento do tipo um para muitos (eu tenho apenas um usuário, mas ele pode ter mais de 1 endereço ou telefone)

O problema seria os níveis. Teria que fazer uma tabela em separado, onde você colocaria

código do usuário - tipo de usuário - nível

Nesta tabela auxiliar, você teria as repetições (por causa do tipo de usuário e nível)

Para cada página que for acessada, com base no código do usuário, você teria que pesquisar na auxiliar para ver se o tipo de usuário e nível de acesso são compatível com o que ele quer ver.

Claro que você vai precisar criar uma tabela que tenha

conteúdo(nome da pagina) - Tipo de usuário - nível

Para poder fazer o cruzamento das permissões da página com a permissão do usuário.

Perceba que no caso do nível, eu também posso ter segmentação, por exemplo, uma pessoa pode ser "Editor", mas não ter a permissão de criar, apenas atualizar.

Se as tabelas forem indexadas, não vejo problema de desempenho.

Existem outras formas de fazer, você pode pesquisar no Google por ACL (Access Control Level). Pesquise por isso + a linguagem que vai utilizar que você vai achar outros exemplos.