Ir para conteúdo

POWERED BY:

Arquivado

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

Hugo Eyer

Nao sei como se faz

Recommended Posts

Ola pessoal,

 

Vou explicar minha sistuacao:

 

Estou criando 2 tipos de relatorios. Sendo que 1 todos podem ver. E outro somente o gerente e eu podemos. E preciso colocar um codigo que bloqueie quando alguem com o login sem ser o meu ou o do gerente.

 

O que estou fazendo é colocar esse codigo:

 

ASP
Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")

rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRING

rsVERIFICA.Source = "SELECT * FROM dbo.USUARIO_PERFIL WHERE LOGIN LIKE '"&TRIM(REQUEST.COOKIES("MATRICULA"))&"' AND IDPERFIL=1"

rsVERIFICA.Open()

 

IF rsVERIFICA.Source is FALSE THEN

        RESPONSE.Redirect "erro.asp?cod=0007"

END IF

 

--------------------

 

Com esse codigo ele so deixa o usuario cadastrado na tabela usuario_perfil, com o perfil igual a 1 ver o relatorio.

So que o que acontece que todos estao conseguindo ver. Nao esta sendo bloqueado como desejado.

E a parte do "IF" embaixo seria caso o perfil do usuario nao seja o aceito, ele enviar uma mensagem de erro.

Nao sei se expliquei bem... mas é basicamente isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo

 

Troca a verificação por:

 

ASP
IF rsVERIFICA.EOF THEN

      RESPONSE.Redirect "erro.asp?cod=0007"

END IF

 

Só que sua verificação não está muito segura pois não é recomendado guardar informações utilizadas como critério de segurança em cookies, já que cookies são arquivos.

 

Abraço

Cassiano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa amigão,Nao funcionou com o codigo que voce me mandou. Compreendo que nao fica muito segura, porque eu copiei esse codigo de outro programa.Voce poderia me mostrar uma jeito seguro de se fazer isso ?Obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo, uma pequena sugestão para ti, não coloques informações preciosas em cookies (como o nosso amigo CassianoVix disse), isso será facilmente hackeado, crie um campo na base de dados, pode ser por exemplo, "controleAcesso" onde tens o nivel 1 e 0, toda a vez que o carinha fizer login, armazena o valor desse campo numa session (com um nome bem complicado e dificil de descobrir), assim, todaa vez que o usuario tentar acessar alguma informação ou pagina, você verifica se o valor da session é para administradores ou funcionarios, por exemplo, se fosse 1, seria adm e se fosse 2 seria funcionario...Bom, é so um palpite, pk acho mais seguro e tbm simplifica o teu codigo... penso eu...Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo, uma pequena sugestão para ti, não coloques informações preciosas em cookies (como o nosso amigo CassianoVix disse), isso será facilmente hackeado, crie um campo na base de dados, pode ser por exemplo, "controleAcesso" onde tens o nivel 1 e 0, toda a vez que o carinha fizer login, armazena o valor desse campo numa session (com um nome bem complicado e dificil de descobrir), assim, todaa vez que o usuario tentar acessar alguma informação ou pagina, você verifica se o valor da session é para administradores ou funcionarios, por exemplo, se fosse 1, seria adm e se fosse 2 seria funcionario...Bom, é so um palpite, pk acho mais seguro e tbm simplifica o teu codigo... penso eu...

ola, faça como eu te disse acima, cria o campo na bd, qd você fizer a conexão a base de dados para validar o login faça o seguinte: vamos supor que o seu campo na base de dados chama-se "controleAcesso" (como sugeri acima).
sua conexão a bd...criação do objeto RecordSet...sua instrução sql...pronto, vamos supor que a variavel RS_info é que contém o seu objeto recordSet, crias a session assim:session("um_nome_bem_complicado_para_ninguem_descobrir") = RS_info("controleAcesso")  -->lembra do campo controleAcesso que contem 1 ou 0? é assim que vais recuperar o que o usuario tem nesse campo qd fazer a validação do login.
pronto, ja temos a session que contem a informação se o usuario pode ou não ter acesso a pagina. Agora é simples, pegue o valor dessa session e verifique se este valor da acesso a pagina, tipo:
no inicio da pagina coloques assim:if session("um_nome_bem_complicado_para_ninguem_descobrir") = "0" then   -->0 significa, neste caso, que não tem acesso a pagina.response.redirect("qualquer_pagina.asp")else	--> se o valor da session não for 0, significa que é 1, portanto tem acessoend if-->ou podes usarif session("um_nome_bem_complicado_para_ninguem_descobrir") = "0" thenresponse.write("não tens acesso.")response.end()else	end if
Bom, ta ai um principio, se tiveres alguma duvida, posta ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi entendi agora...

 

Mas nao estou conseguindo... acho que falta um detalhe ainda.

Fiz na base de dados a tabela controleacesso. Com o numero 0 e 1, 0 nao tem acesso e 1 possui acesso.

 

Mas eu nao teria que fazer algo ligado a outra tabela com essa, tipo, se o login do cara for igual a 0 ele nao tem acesso mas se for igual a 1 ele tem...

 

O codigo esta assimmmm ------

 

ASP
Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")

rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRING

rsVERIFICA.session("IdPerfil") = rsVERIFICA("CONTROLEACESSO")

rsVERIFICA.Open()

 

IF session("IdPerfil") = 1 then

        response.write("Não possui acesso.")

else

end if

 

-------

 

Aguardo, creio que estamos chegando la.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

não precisa criar uma nova tabela, era apenas criar um novo campo na tabela onde você vai buscar as informações do login, veja:

 

Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRINGrsVERIFICA.session("IdPerfil") = rsVERIFICA("CONTROLEACESSO") -----> isso significa que tens o campo "CONTROLEACESSO" na sua tabelarsVERIFICA.Open()

Acrecente o campo "CONTROLEACESSO" na tabela que você tem os dados de login, assim, na hora que o user for fazer o login, você acrecenta ao seu codigo que valida o login isso: rsVERIFICA.session("IdPerfil") = rsVERIFICA("CONTROLEACESSO"), mas este campo "CONTROLEACESSO" tem que estar na mesma tabela dos dados de login, e lembrando que se você for acrecentar esse codigo, tens que ter atenção no rsVERIFICA, se é essa variavel que você tem no seu codigo de login.

 

Bom, qualquer duvida posta ai que eu te ajudo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo

 

Da uma olhada neste artigo que nosso colega Gustavo Faelli escreveu.

É um Sistema de Login Mulltinível, eu estou usando ele em minha pagina e funciona perfeitamente.

 

Artigo

 

Espero que te ajude !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acrecentei o campo controleacesso na tabela... ele esta em formato bit, que so aceita 1 e 0.

1 seria para ter acesso e 0 nao ter acesso.

Entao... esta dando um erro quando eu estou postando esse codigo----

 

ASP
Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")

rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRING

rsVERIFICA.session("LOGIN") = rsVERIFICA("CONTROLEACESSO")

rsVERIFICA.Open()

 

IF session("LOGIN") = 0 then

        response.write("Não possui acesso.")

else

end if

 

-----

 

Nao tenho certeza que ele esta certo, estou na duvida na parte do rsVERIFICA.session. Estaria certo colocar "login" ali ?

 

Na tabela de usuarios tem todos esses campos... login nome senha dtlogincadastro ativo contratante e eu inclui o acessocontrole no formato que falei acima. Estaria certo ?

 

obrigado pela atencao

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o erro exatamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparece uma mensagem do windows quando clico para abrir o relatorio." O internet explorer nao pode baixar relatoriototal.asp de localhost.O internet explorer nao pode abrir esse site da internet. O site solicitado nao esta disponivel ou nao pode ser encontrado. Tente novamente mais tarde. "Sendo que isso apareceu quando coloquei o codigo... se eu tiver o codigo de restricao a usuario o relatorio abre normalmente.obrigado* se eu tirar*

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola, tens uns erros no codigo, corrija sff:

Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")session("LOGIN") = rsVERIFICA("CONTROLEACESSO") --> tira o rsVERIFICA de session, "LOGIN" é o nome da sua session, podes dar um nome quelquer a sua session, ate recomendo que seja um nome bem complicado de se adivinhar e outra coisa,  o campo CONTROLEACESSO esta em maiúsculo na base de dados?? se não estiver, coloque em minusculo aqui no seu codigo.rsVERIFICA.Open()IF session("LOGIN") = 0 then 		response.write("Não possui acesso.")elseend if

Outra dica, esse erro que você esta vendo, não é propriamente o erro, abra no firefox que ele é capas de mostrar o erro mais precisamente, pk os pequenos erros o ie geralmente esconde.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei igualzinho e continua dando erro =/

 

ASP
Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")

rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRING

session("NOME_BEM_DIFICIL") = rsVERIFICA("CONTROLEACESSO")

rsVERIFICA.Open()

 

IF session("NOME_BEM_DIFICIL") = 0 then

        response.write("Não possui acesso.")

else

end if

 

------

 

Que droga. arg

Nao consigo abri-lo no firefox porque estou fazendo isso em um banco de dados local. E o site mesmo nao abre no firefox.

Compartilhar este post


Link para o post
Compartilhar em outros sites

preciso saber qual o erro que esta dando, porque este codigo é bem simples, não vejo problemas... mas pode ser que haja um outro erro, não digo que não possa ser o que eu te passei, mas seria mais facil tendo o erro em descrição.

 

epa, penso que ja sei, troque isso:

Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRINGrsVERIFICA.Open()  session("NOME_BEM_DIFICIL") = rsVERIFICA("CONTROLEACESSO")IF session("NOME_BEM_DIFICIL") = 0 then response.write("Não possui acesso.")elseend if

Coloque o rsVERIFICA.Open() antes do session("NOME_BEM_DIFICIL") = rsVERIFICA("CONTROLEACESSO") e mais uma vez, campo CONTROLEACESSO esta em maiuscula na base de dados?

Vê se esta troca resolve o problema.

 

Vamos trocar a ordem de uma linha ai, fica assim:

 

Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRINGrsVERIFICA.Open()session("NOME_BEM_DIFICIL") = rsVERIFICA("CONTROLEACESSO")IF session("NOME_BEM_DIFICIL") = 0 then response.write("Não possui acesso.")elseend if

troque o rsVERIFICA.Open() com o session("NOME_BEM_DIFICIL") = rsVERIFICA("CONTROLEACESSO"), se ainda não "activamos" a instrução, como ele vai obter os valores??

Vê la isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tens que trocar uma linha:

Set rsVERIFICA = Server.CreateObject("ADODB.Recordset")rsVERIFICA.ActiveConnection = PLANEJAMENTO_STRINGrsVERIFICA.Open()session("NOME_BEM_DIFICIL") = rsVERIFICA("CONTROLEACESSO")IF session("NOME_BEM_DIFICIL") = 0 then response.write("Não possui acesso.")elseend if

troca o rsVERIFICA.Open() com o session("NOME_BEM_DIFICIL") = rsVERIFICA("CONTROLEACESSO")

não podemos pegar dados antes de abrir a instrução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ruim que nao consigo dar um printscreen aqui. Pq senao mostrava o que esta ocorrendo.

 

Na base de dados esta em maiusculo CONTROLEACESSO.

 

Nao tem como eu postar uma figura aqui. nao sei se a figura vai ser porstada. Mas se for podera ver o que aparece quando clico para abrir o relatorio.

 

C:\Documents and Settings\u43873\Meus documentos\Minhas imagens\imagem.JPG

 

-----------------------------------------------------------------------------------

Post Mesclado

-----------------------------------------------------------------------------------

 

Nao apareceu a imagem.

 

Vou tentar passar o que esta acontecendo por escrito.

 

Eu tenho uma pagina de cadastro na net, e quando eu cadastro esses dados sao ligado a uma base de dados e todos armazenados la. E para pessoas que nao possuem essa base dados temos uma area do site chamada "relatorios" onde aparece tudo que foi cadastrado e transefere para um excel as linhas de cadastro. E desde entao eu preciso fazer 2 tipos de relatorios um total e outro geral, o total para os gerentes e coordenadores veem e o geral para os demais funcionarios. Um eu chamo de relatoriototal.asp e outro de relatoriogeral.asp. E a pagina onde fica esses 2 relatorios se chama relatorios.asp

 

Me confirmem se eu tenho que colocar esse codigo no relatoriototal.aps ?

 

Acho que dessa vez consegui me expressar melhor.

Obrigado, no aguardo.

 

Abraços

 

-----------------------------------------------------------------------------------

Post Mesclado

-----------------------------------------------------------------------------------

 

Olha so olha so,

 

Coloquei esse simples codigo e funcionou parcialmente.

 

ASP
IF CONTROLEACESSO = 0 THEN

        RESPONSE.Redirect "erro.asp?erro=0007"

ELSE

END IF

 

------

 

Mas estou com um problema, estou tentando resolver.

Acontece que, nao importando quem esta logado ele esta fazendo o que esta escrito no codigo. Se eu coloco 'zero' no "if controleacesso" da a mensagem de erro que coloquei. Mas se eu coloco 1 ele consegue abrir. Isso para todos os usuarios. No caso 1 teria acesso e 0 nao teria.

 

Entao, estamos chegando la.

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Higo Eyer, vamos esclarecer algumas coisas, o usuario so pode ver os relatorios se estiver logado? se sim, qual o seu codigo para buscar as informações de login?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim ele so pode ver se estiver logado.

 

Esse é o codigo que busca o login.

ASP
<!--#include file="conexao/conexao.asp" -->

<!--#include file="funcoes/funcoes_vbscript.asp" -->

<%

Session.LCID = 1046

Set Conex = Server.Createobject("ADODB.Connection")

Conex.open PLANEJAMENTO_STRING

LOGIN = REQUEST.Form("LOGIN")

SENHA = REQUEST.Form("SENHA")

 

IF LOGADO = TRUE THEN

        RESPONSE.Cookies("LOGIN_ACIONA") = ""

        RESPONSE.Redirect "default.asp"

END IF

 

 

SQL = "SELECT UPPER(LOGIN) AS LOGIN, UPPER(NOME) AS NOME, ATIVO FROM USUARIOS WHERE LOGIN = '" & LOGIN & "' AND SENHA = '"& SENHA &"'"

SET rsUSUARIO = CONEX.EXECUTE(SQL)

 

IF rsUSUARIO.EOF THEN

        rsUSUARIO.CLOSE

        SET rsUSUARIO = NOTHING

                RESPONSE.Redirect "erro.asp?erro=0001"

END IF

 

IF rsUSUARIO("ATIVO") = FALSE THEN

        rsUSUARIO.CLOSE

        SET rsUSUARIO = NOTHING

                RESPONSE.Redirect "erro.asp?erro=0003"

END IF

 

LOGIN = rsUSUARIO("LOGIN")

NOME = rsUSUARIO("NOME")

 

RESPONSE.Cookies("LOGIN_ACIONA") = LOGIN

IF TRIM(SENHA) = "123" THEN

        RESPONSE.Redirect "senha.asp"  

END IF

SQL = "UPDATE USUARIOS SET DTULTIMOACESSO = GETDATE() WHERE LOGIN = '" & TRIM(REQUEST.Cookies("LOGIN_ACIONA")) & "'"

SET rsDTACESSO = CONEX.EXECUTE(SQL)

 

RESPONSE.Redirect "default.asp"

 

rsDTACESSO.CLOSE

SET rsDTACESSO = NOTHING

%>

 

E agora ?

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.