Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme_90

Modelagem de uma tabela

Recommended Posts

Boa tarde pessoal, deparei com um problema que acredito ter feito uma "análise" errada do meu projeto!

Bom, tenho duas tabelas que são referentes a usuários:

 

- usuários

- administradores

 

Esse meu projeto consiste em um site e um gerenciador de conteúdo. Até aqui tudo bem, mas agora que vem o problema. Na minha tabela usuários tem o campo nível, que a sua idéia é verificar o nível de acesso (visitante, administrador), mas o problema é que se caso o usuário logar no site e ele por um acaso souber a url do meu gerenciador, ele poderá ter acesso a ele, então por isso criei a tabela administradores, assim somente os mesmos cadastrados NESTA tabela terá acesso ao sistema. E tem outro problema, o administrador também irá cadastrar tutoriais. Será que na tabela de tutoriais, eu poderia colocar id_administrador, pra fazer a união das tabelas?

 

Vejam abaixo a modelagem do meu banco de dados:

image.jpg

 

Será que eu fiz algo de errado quanto a isso? Dê sugestões para que eu possa fazer algo melhor!

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na minha tabela usuários tem o campo nível, que a sua idéia é verificar o nível de acesso (visitante, administrador), mas o problema é que se caso o usuário logar no site e ele por um acaso souber a url do meu gerenciador, ele poderá ter acesso a ele, então por isso criei a tabela administradores, assim somente os mesmos cadastrados NESTA tabela terá acesso ao sistema. E tem outro problema, o administrador também irá cadastrar tutoriais. Será que na tabela de tutoriais, eu poderia colocar id_administrador, pra fazer a união das tabelas?

 

1) Você pode trabalhar com as duas tabelas, administradores e usuários. Ou você pode usar apenas uma tabela, com um campo nível - como você fez. Quando o usuário se logar no site e for visitar o gerenciador basta que você verifique se quem esta logado é administrador ou visitante, se for visitante você exibe uma mensagem de erro ou redireciona de volta pro site. Quando o usuário logar, seja no site ou no gerenciador grave numa sessão o id dele e o nível. Então use esses dados para fazer as validações necessárias.

 

2)Id do admin no tutorial: isso depende, se você precisa saber qual admin cadastrou o tutorial então beleza, registre o id dele no tutorial.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maykonn

1) É justamente isso que estou fazendo neste exato momento. ^_^

2) No caso, eu preciso saber qual admin fez o cadastro do tutorial, então terei de colocar o id dele como chave estrangeira na tabela tutorial.

 

Bom, acho que o problema está resolvido. Muito obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro fazer diferente.

Já ouviu falar de VIEWS sql?

 

Uma VIEW é como se fosse uma "tabela buffer" de uma consulta e é somente leitura, mas toda vez que você atualiza a tabela que a gera, ela é atualizada "automaticamente".

Você poderia fazer assim:

CREATE VIEW administradores AS SELECT id, nome, sobrenome, email, senha, dataCadastro, online FROM usuarios WHERE nivel = 2

(supondo que 2 seja o nível do admin)

 

Você poderia então referenciar a chave estrangeira em tutoriais a partir dessa view, pois ela é quase uma tabela normal, você só não pode escrever dados nela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro fazer diferente.

Já ouviu falar de VIEWS sql?

 

Uma VIEW é como se fosse uma "tabela buffer" de uma consulta e é somente leitura, mas toda vez que você atualiza a tabela que a gera, ela é atualizada "automaticamente".

Você poderia fazer assim:

CREATE VIEW administradores AS SELECT id, nome, sobrenome, email, senha, dataCadastro, online FROM usuarios WHERE nivel = 2

(supondo que 2 seja o nível do admin)

 

Você poderia então referenciar a chave estrangeira em tutoriais a partir dessa view, pois ela é quase uma tabela normal, você só não pode escrever dados nela.

Nunca ouvi falar. Vou dar uma analisada nisso e lhe falo. É que na verdade já está pronto o que fiz, porém custa nada fazer de um jeito melhor. Valeu pela dica!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja pensou em criar um classe para verificar isso?

Eu fiz um sistema em php+mysql onde tem um tabela "usuario" e outra "usuario_perm" (modulos que o user tera acesso)

Então eu fiz uma classe Usuario com um variavel admin[] ( $Usuario->admin['nomemodulo'] ) ai quando faz o login ja faz um select com todos as suas permissoes da tabela usuario_perm e jogo para o array admin[];

 

Ai no index de cada modulo eu coloco:

if (!$Usuario->admin('nomemodulo')) header("Location: /erro/?403");

 

Entendeu ?

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

MSouza_

Fiz mais ou menos essa lógica. Já está funcionando aqui sem criar a VIEW no SQL!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm.

 

Eu gostei da sua modelagem, não vou dizer que está "errada", pois eu faria de outro jeito. Respeito sua opinião. Eu faria da seguinte forma:

 

1º - Usuário e Administrador são Pessoas, concorda?

 

Criaria uma tabela Pessoa onde consistiria nos campos mínimos necessários para ela ser considerada uma pessoa.

 

Dentro da tabela Pessoa, teria um id_login que estaria se referenciando a uma tabela Login, até ai tudo bem?

 

Na tabela Login eu teria os seguintes campos:

- id

- id_pessoa

- username

- password

- id_permissao

 

O campo id_permissao estaria sendo referenciado a uma tabela permissaoLogin, que dai você pode "settar" melhor as permissões do Sistema. Segue os campos dessa tabela.

 

- id ( da permissão )

- tipoPermissao ( Usuario, Administrador, Author e bla bla bla )

 

Feito isso, você utiliza sempre o id_login e/ou id_pessoa para referenciar o mesmo, sendo que desse modo ( Se você não utilizar id_login como unique) você pode atribuir 2 logins para uma mesma pessoa.

 

Espero ter ajudado. Mais ou menos assim que eu faria e utilize a dica do @Henrique Barcelos, views é muito f*** !

 

:grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, me desculpa a demorapara responder, sacomé, a vida corre!

Cara, gostei da sua idéia, vou ver se implemento, fica até melhor que ter um campo nível em uma só tabela!

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.