Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
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:
Será que eu fiz algo de errado quanto a isso? Dê sugestões para que eu possa fazer algo melhor!
Muito obrigado.
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!
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.
>
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!
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...
MSouza_
Fiz mais ou menos essa lógica. Já está funcionando aqui sem criar a VIEW no SQL!
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:
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.
>
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.