Ir ao conteúdo
  • Cadastre-se
Julio Augusto Carvalho

PHP Nível de acesso em PHP

Recommended Posts

Boa tarde meus consagrados, nunca cheguei a utilizar o grupo para postagens e etc. Tenho um sistema de login que pega Nome completo, Senha e Id de login. No banco tenho os mesmos campos mas tenho um campo chamado classe que declarei auto incremento de "guest" e eu mesmo irei dar upgrade. Queria desenvolver um sistema que ele verifica a classe do usuário e mostre apenas alguns menus no site. Se alguém puder me ajudar fico grato ! deixarei os arquivos que tentei fazer anexados. Quem quiser o menu entre em contato por favor.

site.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Julio Augusto Carvalho Olá seja bem vindo em nosso Clube do Hardware.

 

Não entendi a parte de colocar o guest como auto incremento. O auto incremento deve ser usado somente apenas para o ID do registro na linha da tabela, para ser usada como identificação.  O que você tem que fazer é criar uma nova tabela para os tipos de classe.

 

Vamos supor que você possui as seguintes classes:  Admin, usuário padrão, usuário avançado.

A tabela ficará:

 

ID  classe
1   admin
2   usuario comum
3   usuario avançado

O campo ID desta tabela será auto incrementado.

Com isso você vai colocar o campo classe na tabela de usuário sendo como uma chave estrangeira, para receber a chave primária da tabela de classes.

 

Estas tabelas terão um relacionamento de 1:N e quando for fazer a consulta vai usar o INNER JOIN para procurar na tabela de classes baseada no ID que o usuário possui no campo classe da tabela usuário.

 

Na hora da verificação de login, você implementa um teste de IF ou switch case, para o tipo de classe,  Se for admin, você redireciona para uma página com todos os recursos, se for usuário comum redireciona para outra página, se for usuário avançado redireciona para outra... e por aí vai.

 

Sugiro fazer uma pesquisa aqui no fórum de programação web sobre níveis de login. Há alguns tópicos bem esclarecedores e com exemplos. :thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo bem muito obrigado, é que não tenho conhecimentos avançados ainda mas obrigado pelas dicas ! O auto incremento com o guest seria para que todos usuários que forem se cadastrar recebessem o guest como a classe, e eu mesmo fazer o upgrade para a vio ou admin esse era meu ponto de vista.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Julio Augusto Carvalho

2 horas atrás, Julio Augusto Carvalho disse:

O auto incremento com o guest seria para que todos usuários que forem se cadastrar recebessem o guest como a classe

Entendo, mas está errado esta parte. Porque ao fazer um auto incremento, você aumenta em 1 o valor.

Então se 1 é guest, o 2 não pode ser guest.

 

Por isso recomendo a criação de uma nova tabela, para comportar a 2NF e 3NF do banco de dados.

 

Basicamente você deve deixar seu banco de dados desta maneira:

 

tabela usuario

ID  nome     email                senha classe 
1   Fulano   fulano@hotmail.com   1234    1 
2   Beltrano beltrano@hotmail.com 1234    1
3   Ciclano  ciclano@hotmail.com  1234    2

Tabela classe

ID  nome
1   Guest
2   admin

 

Repare que na tabela usuário o campo classe recebe um valor do tipo INT que é a chave estrangeira.

O campo ID da tabela classe é a chave primária que liga as duas.

 

Então no momento do cadastro, você define direto que todos terão a classe com ID 1

Por exemplo:

INSERT INTO usuarios (nome, email, senha, classe) VALUES("$nome", $email, "$senha", 1);

 

Então quando for fazer um select na tabela desta forma:

 

SELECT usuario.ID, usuario.nome, usuario.email, usuario.senha, classe.nome
FROM usuario
INNER JOIN classe ON classe.ID = usuario.classe
WHERE usuario.ID = 1

Vai retornar:

1 Fulano fulano@hotmail.com  1234 Guest

Lembre, isso é só um exemplo de como vai retornar dados.

 

Para fazer o nível de login você deve usar o exemplo acima no arquivi php que faz a autenticação de login e então fazer um teste para saber que tipo de nível ele tem:

//Recebe os dados do formulário de login
$email = $_POST["email"];
$senha = $_POST["senha"];

//abre a conexão com o BD
$conexao = mysqli_connect("localhost", "root", "", "nome do banco de dados");

//Faz a consulta dos dados de quem tá logando
$select = mysqli_query($conexao, "SELECT usuario.ID, 
                                         usuario.nome, 
                                         usuario.email, 
                                         usuario.senha, 		                
                                         usuario.classe
                                 FROM usuario
                                 WHERE email ='$email' AND senha = '$senha'");

//atribui em uma variável o resultado do select
$dados = mysqli_fetch_object($select);

//variável que atribui o campo classe da tabela usuario
$classe = $dados->classe;

//testa se é guest ou admin
IF($classe == 1):
    header(location: guest.php);

else:
     header(location: admin.php);
endif;

O código acima contém comentários por linha para você entender.

Claro que o código acima não está completo, então não recomendo copiar e colar. Use ele como base para estudar e implementar o seu sistema.

 

Você pode colocar o nome do usuário na session para poder fazer um "bem vindo fulano".

 

Sobre as tabelas que mencionei acima, é importante frisar que, para funcionar corretamente, a tabela que é mandante da consulta(usuario) precisa ter o índice(index) para o campo classe, pois ele é a chave estrangeira que recebe a chave primária da outra tabela(classe)

 

O que você quer fazer é bastante similar a estes tópicos:

 

 A ideia é a mesma! Boa sorte.:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, DiF disse:

@Julio Augusto Carvalho

Entendo, mas está errado esta parte. Porque ao fazer um auto incremento, você aumenta em 1 o valor.

Então se 1 é guest, o 2 não pode ser guest.

 

Por isso recomendo a criação de uma nova tabela, para comportar a 2NF e 3NF do banco de dados.

 

Basicamente você deve deixar seu banco de dados desta maneira:

 

tabela usuario


ID  nome     email                senha classe 
1   Fulano   fulano@hotmail.com   1234    1 
2   Beltrano beltrano@hotmail.com 1234    1
3   Ciclano  ciclano@hotmail.com  1234    2

Tabela classe


ID  nome
1   Guest
2   admin

 

Repare que na tabela usuário o campo classe recebe um valor do tipo INT que é a chave estrangeira.

O campo ID da tabela classe é a chave primária que liga as duas.

 

Então no momento do cadastro, você define direto que todos terão a classe com ID 1

Por exemplo:


INSERT INTO usuarios (nome, email, senha, classe) VALUES("$nome", $email, "$senha", 1);

 

Então quando for fazer um select na tabela desta forma:

 


SELECT usuario.ID, usuario.nome, usuario.email, usuario.senha, classe.nome
FROM usuario
INNER JOIN classe ON classe.ID = usuario.classe
WHERE usuario.ID = 1

Vai retornar:

1 Fulano fulano@hotmail.com  1234 Guest

Lembre, isso é só um exemplo de como vai retornar dados.

 

Para fazer o nível de login você deve usar o exemplo acima no arquivi php que faz a autenticação de login e então fazer um teste para saber que tipo de nível ele tem:


//Recebe os dados do formulário de login
$email = $_POST["email"];
$senha = $_POST["senha"];

//abre a conexão com o BD
$conexao = mysqli_connect("localhost", "root", "", "nome do banco de dados");

//Faz a consulta dos dados de quem tá logando
$select = mysqli_query($conexao, "SELECT usuario.ID, 
                                         usuario.nome, 
                                         usuario.email, 
                                         usuario.senha, 		                
                                         usuario.classe
                                 FROM usuario
                                 WHERE email ='$email' AND senha = '$senha'");

//atribui em uma variável o resultado do select
$dados = mysqli_fetch_object($select);

//variável que atribui o campo classe da tabela usuario
$classe = $dados->classe;

//testa se é guest ou admin
IF($classe == 1):
    header(location: guest.php);

else:
     header(location: admin.php);
endif;

O código acima contém comentários por linha para você entender.

Claro que o código acima não está completo, então não recomendo copiar e colar. Use ele como base para estudar e implementar o seu sistema.

 

Você pode colocar o nome do usuário na session para poder fazer um "bem vindo fulano".

 

Sobre as tabelas que mencionei acima, é importante frisar que, para funcionar corretamente, a tabela que é mandante da consulta(usuario) precisa ter o índice(index) para o campo classe, pois ele é a chave estrangeira que recebe a chave primária da outra tabela(classe)

 

O que você quer fazer é bastante similar a estes tópicos:

 

 A ideia é a mesma! Boa sorte.:thumbsup:

o código possui alguns erros ! o php não reconhece endif

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Julio Augusto Carvalho Como mencionei  anteriormente NÃO COPIE.

Ademais, o endif é uma sintaxe alternativa do php.

Seria o mesmo que:

if(condição){


}else{

}

Como eu não gosto de usar chaves como bloco delimitador porque confunde muito quando tem vários blocos de if.. eu uso sempre a sintaxe alternativa:

if(condição):

else:

endif;

for(condição):

endfor;

while(condição):

endwhile;

 

Não possui erros o código, pois foi retirado de uma parte de onde funcionava. Usei apenas como exemplo didático.

 

De qualquer forma, sugiro que você leia aqueles dois tópicos que postei acima, que tem muita explicação.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×