Ir para conteúdo

POWERED BY:

Arquivado

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

Didiron

[Resolvido] Sistema de Login com Níveis de usuários

Recommended Posts

Boa tarde pessoal,

estou querendo fazer um sistema de login com niveis de usuários, só que ainda não cheguei na lógica adequada.

Eu tenho uma tabela no banco de dados com os seguintes campos:

 

Id,Login,Senha,Moderador,Administrador,Avatar,DataRegistro,Posts,Localidade,Nome

 

Onde que alguns registros possuem no campo moderador a palavra sim e no campo administrador a palavra não e também vice-versa, fazendo com que os usuarios sejam moderadores ou administradores respectivamente, e tem registros também que nos dois campos tem a palavra não, significando que ele é um usuário normal.

 

o meu problema vem no meu seguinte código:

 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
    Login = Request.Form("Usuario")
    Senha = Request.Form("Senha")
    Moderador = "sim"
    NaoModerador = "nao"
    Admin = "sim"
    NaoAdmin = "nao"
    
Set Conexao = Server.CreateObject("ADODB.Connection")
            Conexao.ConnectionString = ("Driver=MySQL ODBC 5.1 Driver;DataBase=Forum;Server=localhost;Uid=root;PassWord=123456;")
        Conexao.Open
        
        SQLUsuarios = "SELECT * FROM usuarios WHERE Login ='"& Login &"' and Senha='"& Senha &"' and Moderador='"& NaoModerador &"' and Administrador='"& NaoAdmin &"'"
        Set ListarUsuarios = Conexao.Execute(SQLUsuarios)
        
        SQLModeradores = "SELECT * FROM usuarios WHERE Login ='"& Login &"' and Senha='"& Senha &"' and Moderador='"& Moderador &"' and Administrador='"& NaoAdmin &"'"
        Set ListarModeradores = Conexao.Execute(SQLModeradores)
        
        SQLAdmins = "SELECT * FROM usuarios WHERE Login ='"& Login &"' and Senha='"& Senha &"' and Moderador='"& NaoModerador &"' and Administrador='"& Admin &"'"
        Set ListarAdmins = Conexao.Execute(SQLAdmins)
        
        
        If ListarUsuarios.EOF then
            LoginUsuarios = false
        Else
            LoginUsuarios = true
        End if
        
        If LoginUsuarios = true then
            Session("Usuario") = true
            response.Redirect("UsuarioLogado.asp")
        Else
            Response.Redirect("LoginErrado.asp")
        End if
        
        
        
        If ListarModeradores.EOF then
            LoginModeradores = false
        Else
            LoginModeradores = true
        End if
        
        If LoginModeradores = true then
            Session("Moderador") = true
            response.Redirect("ModeradorLogado.asp")
        Else
            Response.Redirect("LoginErrado.asp")
        End if
                
        
        
        If ListarAdmins.EOF then
            LoginAdmins = false
        Else
            LoginAdmins = true
        End if
        
        If LoginAdmins = true then
            Session("Admin") = true
            response.Redirect("AdminLogado.asp")
        Else
            Response.Redirect("LoginErrado.asp")
        End if
%>

 

Só que ele não funciona corretamente, por causa do primeiro Else, que sempre vai cair nele caso não seja um Usuário normal.

Então eu gostaria de saber qual a lógica adequada para se criar um sistema de login e senha com níveis de acesso. Alguém poderia me ajudar?

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo

 

<!–#include file=”inc-dbconnection.asp”–>

<%
‘pegamos o login através da session

username = Session(“userid”)

‘login esta correto, pois veio através da session
‘Vamos então verificar o nível de acesso do usuário.
session(“nivel_acesso”) = objRS(“nivel”) ‘ session para utiliza-las em outras páginas

Response.Redirect “adm.imistracao.asp” ‘página restrita

‘A primeira coisa a ser feita é verificar se o usuário está logado
If Session(“loggedin”) = “” Then
  Response.Write “Você não está logado!”
  Response.End
End If

‘verificarmos o nivel de acesso do usuário e inserirmos o conteúdo correspondente
‘voce pode fazer um menu , no nosso caso alguns links
If session(“nivel_acesso”) = 3 Then ‘admin
%>
  <a href=”consultar.asp”>Consultar artigo </a>
  <a href=”inserir.asp”>Inserir artigo </a>
  <a href=”alterar.asp”>Alterar artigo < /a>
  <a href=”excluir.asp”>Deletar artigo </a>

  <a href=”search.asp”>Pesquisa  Avançada</a>
  <a href=”log.asp”>Verificar Log</a>

  <a href=”notificar.asp”>Notificar usuário </a>
<%
Elseif session(“nivel_acesso”) = 2 Then ‘Moderadores
%>
  <a href=”consultar.asp”>Consultar artigo </a>
  <a href=”alterar.asp”>Alterar artigo </a>

  <a href=”excluir.asp”>Deletar artigo </a>

  <a href=”search.asp”>Pesquisa  Avançada</a>

  <a href=”notificar.asp”>Notificar artigo </a>
<%
Else ‘usuario
%>
  <a href=”consultar.asp”>Consultar artigo </a>
<%
End If
%>

E para bloquear o acesso , sempre verifique a session(“nivel_aecsso”) , para evitar de um usuário digitar a URL excluir.asp no browser, e ter acesso. Por isso, em cada página com acesso restrito, precisamos fazer a verificação do nível de acesso.

 

<%
If session(“nivel_aecsso”) < 3 Then ’se não for admin
  Response.Write “Você não tem autorização para ver esta página!”
  Response.End
End If
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xanburzum, o seu exemplo ajudou bastante, eu só não entendi uma parte do código:

 

‘pegamos o login através da session

username = Session(“userid”)

‘login esta correto, pois veio através da session
‘Vamos então verificar o nível de acesso do usuário.
session(“nivel_acesso”) = objRS(“nivel”) ‘ session para utiliza-las em outras páginas

 

Eu gostaria de saber aonde que voce pega os valores digitados pelo usuario(login e senha) e onde que nesse caso daria para fazer o Select no banco de dados para ver se os dados digitados pelos usuários conferem.

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esses valores são recuperados de um formulário, onde o user entra com os dados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah entendi, mas só uma coisa, a tabela no banco de dados teria algum campo diferente?

Pois no meu tinha dois campos: moderador e admin, que eu botava como sim ou como não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele gera algum número de erro, se sim, poste o número e linha...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Xamburzum, eu coloquei um campo Nivel lá na minha tabela do bd, e fiz o código conforme voce explicou, ficou da seguinte forma:

 

 

<%@LANGUAGE="VBSCRIPT"%>
<%

Dim Conexao, SQL, Listar

'Atribuindo valor as variaveis

        Set Conexao = Server.CreateObject("ADODB.Connection")
            Conexao.ConnectionString = ("Driver=MySQL ODBC 5.1 Driver;DataBase=Forum;Server=localhost;Uid=root;PassWord=123456;")
        Conexao.Open
        

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="estilos.css" rel="stylesheet" type="text/css" />
<title>Untitled Document</title>
</head>

<body>
<div id="topo">
  <h1>Fórum Dionei Cardozo</h1>
</div>

<div id="menu">
<%
Login = Request.Form("Usuario")
    Senha = Request.Form("Senha")
    
Set Conexao = Server.CreateObject("ADODB.Connection")
            Conexao.ConnectionString = ("Driver=MySQL ODBC 5.1 Driver;DataBase=Forum;Server=localhost;Uid=root;PassWord=123456;")
        Conexao.Open
        
        SQLUsuarios = "SELECT * FROM usuarios WHERE Login ='"& Login &"' and Senha='"& Senha &"' "
        Set ListarUsuarios = Conexao.Execute(SQLUsuarios)
        
username = Session("userid")
session("nivel_acesso") = ListarUsuarios("Nivel")


If Session("loggedin") = "" Then

response.Write("<div align='center'><a href='Login.asp'><img src='imagens/login.jpg' border='0' /></a><a href='cadastrarUsuario.asp'><img src='imagens/cadastrar.jpg' border='0' /></a></div>")

End if

If session("nivel_acesso") = 1 or 2 Then
response.Write("<div align='center'><a href='PainelContole.asp'><img src='imagens/PControle.jpg' border='0' /></a><a href='Sair.asp'><img src='imagens/sair.jpg' border='0' /></a></div>")

Else

response.Write("<div align='center'><a href='AlterarUsuarios.asp'><img src='imagens/AlterarUsuarios.jpg' border='0' /><a href='PainelContole.asp.asp'><img src='imagens/PControle.jpg' border='0' /></a><a href='Sair.asp'><img src='imagens/sair.jpg' border='0' /></a></div>")

End if
%>
</div>
<br />
<table width="93%" border="0" align="center">
  <tr>
    <td align="left"><a href="newtopic.asp"><img src="imagens/novo-topico.jpg" width="130" height="25" /></a></td>
  </tr>
</table>
<div class="exibicoes">

<table width="93%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="11"><img src="imagens/bg-esquerdo.jpg" width="10" height="30" /></td>
    <td width="530" align="center">Tópicos</td>
    <td width="10" align="center"> </td>
    <td width="10"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="251" align="center">Autor</td>
    <td width="12" align="left"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="197" align="center">Visualizações</td>
    <td width="25"><img src="imagens/bg-direito.jpg" width="10" height="30" align="right" /></td>
    </tr>
</table>

</div>
<div class="topicos">
<table width="93%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="11"></td>
    <td width="530" align="center">Palmeiras sem Pierre, Edinho e Marcos Assunção domingo contra o Ceará</td>
    <td width="10" align="center"> </td>
    <td width="10"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="251" align="center">Dionei Cardozo</td>
    <td width="12" align="left"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="197" align="center">35 Visualizações</td>
    <td width="25"></td>
    </tr>
</table>
<br />

</div>

</body>
</html>

E ele me retornou o seguinte erro:

 

Script error detected at line 49.

Source line: If session("nivel_acesso") = 1 or 2 Then

 

Sem expecificação nenhuma de erro, eu tentei tirar o "or 2" e continuou com o mesmo problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos supor que o nível de uma página de acesso é 3, apenas use assim na página:

 

if not session("nivel_acesso") >=3 or then
response.redirect "erro.asp"
end if

Coloque isso em todas as páginas com nível de acesso apenas trocando o 3 pelo nível requerido.

 

Espero ter ajudado. =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto mesmo Augusto, eu estou achando que não estou conseguindo pegar o nivel da pessoa dentro do banco de dados...

Ou não estou passando o nivel correto para a Session nessa linha:

 

session("nivel_acesso") = ListarUsuarios("Nivel")

Eu acho que essa Session está vindo vazia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, a sql está passando o valor correto, eu refiz o código e melhorei-o, só que ainda persiste com um erro:

 

Script error detected at line 39.

Source line: If (session("nivel_acesso") = 1 )or( session("nivel_acesso") = 2) then

 

 

Meu código:

 

<%@LANGUAGE="VBSCRIPT"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="estilos.css" rel="stylesheet" type="text/css" />
<title>Untitled Document</title>
</head>

<body>
<div id="topo">
  <h1>Fórum Dionei Cardozo</h1>
</div>

<div id="menu">
<%  
    If not isempty(Request.Form) then
    
        Login = Request.Form("Usuario")
        Senha = Request.Form("Senha")
    
    
    
        Set Conexao = Server.CreateObject("ADODB.Connection")
            Conexao.ConnectionString = ("Driver=MySQL ODBC 5.1 Driver;DataBase=Forum;Server=localhost;Uid=root;PassWord=123456;")
        Conexao.Open
        
        SQLUsuarios = "SELECT * FROM usuarios WHERE Login ='"& Login &"' and Senha='"& Senha &"' "
        Set ListarUsuarios = Conexao.Execute(SQLUsuarios)

        session("nivel_acesso") = ListarUsuarios("nivel")
                        
    
    Else
                                    response.Write("<div align='center'><a href='logar.asp'><img src='imagens/menu-logar.jpg' border='0' /></a><a href='CadastrarUsuario.asp'><img src='imagens/menu-cadastrar.jpg' border='0' /></a></div>")                    

    End if


                                If (session("nivel_acesso") = 1 )or( session("nivel_acesso") = 2) then

                                    response.Write("<div align='center'><a href='PainelContole.asp'><img src='imagens/PControle.jpg' border='0' /></a><a href='Sair.asp'><img src='imagens/sair.jpg' border='0' /></a></div>")

                                    Else 

                                    response.Write("<div align='center'><a href='AlterarUsuarios.asp'><img src='imagens/AlterarUsuarios.jpg' border='0' /></a><a href='PainelContole.asp'><img src='imagens/PControle.jpg' border='0' /></a><a href='Sair.asp'><img src='imagens/sair.jpg' border='0' /></a></div>")

                         End if
        
%>

</div>
<br />
<table width="93%" border="0" align="center">
  <tr>
    <td align="left"><a href="newtopic.asp"><img src="imagens/novo-topico.jpg" width="130" height="25" /></a></td>
  </tr>
</table>
<div class="exibicoes">

<table width="93%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="11"><img src="imagens/bg-esquerdo.jpg" width="10" height="30" /></td>
    <td width="530" align="center">Tópicos</td>
    <td width="10" align="center"> </td>
    <td width="10"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="251" align="center">Autor</td>
    <td width="12" align="left"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="197" align="center">Visualizações</td>
    <td width="25"><img src="imagens/bg-direito.jpg" width="10" height="30" align="right" /></td>
    </tr>
</table>

</div>
<div class="topicos">
<table width="93%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="11"></td>
    <td width="530" align="center">Palmeiras sem Pierre, Edinho e Marcos Assunção domingo contra o Ceará</td>
    <td width="10" align="center"> </td>
    <td width="10"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="251" align="center">Dionei Cardozo</td>
    <td width="12" align="left"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="197" align="center">35 Visualizações</td>
    <td width="25"></td>
    </tr>
</table>
<br />

</div>

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele está gerando algum número de erro ?!?!?1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é o que é mais estranho, ele nã da especificação do erro.

 

Pessoal quero explicar algumas coisas, eu tenho uma página index.asp, onde que tem um fórum, e nela acontece uma verificação para ver qual o nível da sessão, mas ele só verá o nível da sessão caso as minhas variaveis Login e Senha venham com algum valor, e para issso que tenho essa parte do código:

 

If not isempty(Request.Form) then
    
    Login = Request.Form("Usuario")
    Senha = Request.Form("Senha")

Caso essas variaveis não venham com nenhum valor ele cairá em um Else exibindo na tela um menu para se logar.

Se eu entrar na página logar.asp, e digitar os meus dados, ele faz a sessão corretamente com os tres níveis de usuários, o problema acontece quando eu clico no botão sair que leva para uma página com o seguinte código ou quando eu entro pela primeira vez no minha página sem passar pela sessão:

 

Session.Abandon()
 Session.Contents.RemoveAll()
 response.Redirect("index.asp")

O erro que está dando quando eu clico no botão sair, ou quando eu entro pela primeira vez é:

 

Script error detected at line 31.

Source line: If session("nivel_acesso") = 1 then

 

Segue código da index.asp:

 

<%@LANGUAGE="VBSCRIPT"%>
<%         Set Conexao = Server.CreateObject("ADODB.Connection")
            Conexao.ConnectionString = ("Driver=MySQL ODBC 5.1 Driver;DataBase=Forum;Server=localhost;Uid=root;PassWord=123456;")
        Conexao.Open %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="estilos.css" rel="stylesheet" type="text/css" />
<title>Untitled Document</title>
</head>

<body>
<div id="topo">
  <h1>Fórum Dionei Cardozo</h1>
</div>

<div id="menu">
<%  
If not isempty(Request.Form) then
    
    Login = Request.Form("Usuario")
    Senha = Request.Form("Senha")
    
    
    SQLUsuarios = "SELECT * FROM usuarios WHERE Login ='"& Login &"' and Senha='"& Senha &"' "
    Set ListarUsuarios = Conexao.Execute(SQLUsuarios)

    session("nivel_acesso") = ListarUsuarios("nivel")
                        
    If session("nivel_acesso") = 1 then

        response.Write("<div align='center'><a href='PainelContole.asp'><img src='imagens/PControle.jpg' border='0' /></a><a href='Sair.asp'><img src='imagens/sair.jpg' border='0' /></a></div>")
                                
    End if
                                    
                                
    If session("nivel_acesso") = 2 then
    
        response.Write("<div align='center'><a href='PainelContole.asp'><img src='imagens/PControle.jpg' border='0' /></a><a href='Sair.asp'><img src='imagens/sair.jpg' border='0' /></a></div>")
                                
    End if

                               
    If session("nivel_acesso") = 3 then
        response.Write("<div align='center'><a href='AlterarUsuarios.asp'><img src='imagens/AlterarUsuarios.jpg' border='0' /></a><a href='PainelContole.asp'><img src='imagens/PControle.jpg' border='0' /></a><a href='Sair.asp'><img src='imagens/sair.jpg' border='0' /></a></div>")

    End if
                                                 

Else
        response.Write("<div align='center'><a href='logar.asp'><img src='imagens/menu-logar.jpg' border='0' /></a><a href='CadastrarUsuario.asp'><img src='imagens/menu-cadastrar.jpg' border='0' /></a></div>")                    

End if


        
%>

</div>
<br />
<table width="93%" border="0" align="center">
  <tr>
    <td align="left"><a href="newtopic.asp"><img src="imagens/novo-topico.jpg" width="130" height="25" /></a></td>
  </tr>
</table>
<div class="exibicoes">

<table width="93%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="11"><img src="imagens/bg-esquerdo.jpg" width="10" height="30" /></td>
    <td width="530" align="center">Tópicos</td>
    <td width="10" align="center"> </td>
    <td width="10"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="251" align="center">Autor</td>
    <td width="12" align="left"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="197" align="center">Visualizações</td>
    <td width="25"><img src="imagens/bg-direito.jpg" width="10" height="30" align="right" /></td>
    </tr>
</table>

</div>
<div class="topicos">
<table width="93%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="11"></td>
    <td width="530" align="center">Palmeiras sem Pierre, Edinho e Marcos Assunção domingo contra o Ceará</td>
    <td width="10" align="center"> </td>
    <td width="10"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="251" align="center">Dionei Cardozo</td>
    <td width="12" align="left"><img src="imagens/bg-borda.jpg" width="2" height="30" /></td>
    <td width="197" align="center">35 Visualizações</td>
    <td width="25"></td>
    </tr>
</table>
<br />

</div>

</body>
</html>

Acho que já deu pra entender melhor.

Eu agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz assim:

 

Login = Request.Form("Usuario")
    Senha = Request.Form("Senha")
    
    
    SQLUsuarios = "SELECT * FROM usuarios WHERE Login ='"& Login &"' and Senha='"& Senha &"' "
    Set ListarUsuarios = Conexao.Execute(SQLUsuarios)

    session("nivel_acesso") = ListarUsuarios("nivel")
    
    usuarios = session("nivel_acesso")
                        
    response.write (usuarios)
    response.end

 

Script error detected at line 30.

Source line: usuarios = session("nivel_acesso")

Description: BOF ou EOF são verdadeiros, ou o registro atual foi excluído. A operação solicitada pelo aplicativo requer um registro atual.

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.