Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, sou novo por aqui, é meu primeiro post, li as regras, porém se estiver fazendo algo errado por favor me avisem.
Tenho um sistema de logins, porém preciso que ele tenha níveis de acesso, até ai tudo bem.
Preciso verificar se o nível do usuário permite acesso a página que ele esta acessando,
em todas as páginas eu tenho um verificador para saber se o usuário se logou, vou postar abaixo, gostaria de saber
se nesse próprio verificador consigo validar o nível do usuário tmb, assim não preciso mexer em todas as páginas.
Código do verificador que já existe em todas as páginas:
<?php
session_start();
if (!isset($_SESSION['autenticado'])){
unset($_SESSION);
session_destroy();
?>
<html>
<script language=javascript>
top.location.href = "../index.php";
</script>
</html>
<?php
exit();
}
?>
Se não tiver como usar o mesmo arquivo, qual é a melhor forma e mais fácil de verificar qual é o nível do usuário no BD e liberar acesso a página?
Img da tabela do BD
/applications/core/interface/imageproxy/imageproxy.php?img=http://agenciago.com.br/bd.jpg&key=b76f04b0984662fda46b466b1ad31f1549cb5824c01ce6842a6cad2ce7ee8536" alt="bd.jpg" />
Qm puder ajudar agradeço.
Flw
Cara não deu muito certo, pois indiferente do login que eu use, ele me redireciona para index.php, ele nem chega abrir a página na qual defini o nivel como 1.
>
Cara não deu muito certo, pois indiferente do login que eu use, ele me redireciona para index.php, ele nem chega abrir a página na qual defini o nivel como 1.
Você criou a session no login? $_SESSION["nivel"] ???
Abraço.
Sim, criei veja o código do login:
<?php
session_start();
if(isset($_GET['acao'])){
if ($_GET['acao'] == "logar")
{
include ('include/conexao.inc.php');
$senha_dig = $_POST['senha'];
$senha_dig = trim($senha_dig);
$usuario_dig = $_POST['login'];
$usuario_dig = trim($usuario_dig);
$sql = "SELECT senha, login FROM usuarios WHERE login='$usuario_dig' AND ativo='1'";
$resultado = mysql_query($sql);
if ($senha_bd = mysql_fetch_array($resultado))
{
if ($senha_dig == $senha_bd['senha'])
{
$_SESSION['autenticado'] = true;
$_SESSION['login'] = $senha_bd['login'];
$_SESSION["nivel"];
<script language="JavaScript">
window.location="home.php";
</script>
<?php }
}
else
{
?>
<script language="javascript"> alert("Usuário ou senha incorretos!");</script>
<?php }
}
}
?>Ops..
Não seria:
<?php
session_start();
if(isset($_GET['acao'])){
if ($_GET['acao'] == "logar")
{
include ('include/conexao.inc.php');
$senha_dig = $_POST['senha'];
$senha_dig = trim($senha_dig);
$usuario_dig = $_POST['login'];
$usuario_dig = trim($usuario_dig);
$sql = "SELECT senha, login, nivel FROM usuarios WHERE login='$usuario_dig' AND ativo='1'";
$resultado = mysql_query($sql);
if ($senha_bd = mysql_fetch_array($resultado))
{
if ($senha_dig == $senha_bd['senha'])
{
$_SESSION['autenticado'] = true;
$_SESSION['login'] = $senha_bd['login'];
$_SESSION["nivel"] = $senha_bd['nivel']; // atribuir o valor a ela... e você esqueceu de fechar a tag php
?>
<script language="JavaScript">
window.location="home.php";
</script>
<?php }
}
else
{
?>
<script language="javascript"> alert("Usuário ou senha incorretos!");</script>
<?php }
}
}
?>
?
Abraço.
Alterei porém mesmo assim ele continua me redirecionando para index.php
coloquei o código abaixo na página inicial após o login, ou seja se o login não estiver com o nivel 1 ele n entra nem na primeira página, volta pro login.
<?php
$nivel_pag = 1;
include("include/verifica_aut.inc.php");
?>
Depois alterei o verificador
<?php
session_start();
if (!isset($_SESSION['autenticado'])){
unset($_SESSION);
session_destroy();
?>
<html>
<script language=javascript>
top.location.href = "../index.php";
</script>
</html>
<?php
exit();
}
$nivel == $_SESSION["nivel"];
if($nivel != $nivel_pag) { ?>
<script language=javascript>
top.location.href = "../index.php";
</script>
<?php } ?>
e então modifiquei como você falou o login
<?php
session_start();
if(isset($_GET['acao'])){
if ($_GET['acao'] == "logar")
{
include ('include/conexao.inc.php');
$senha_dig = $_POST['senha'];
$senha_dig = trim($senha_dig);
$usuario_dig = $_POST['login'];
$usuario_dig = trim($usuario_dig);
$sql = "SELECT senha, login FROM usuarios WHERE login='$usuario_dig' AND ativo='1'";
$resultado = mysql_query($sql);
if ($senha_bd = mysql_fetch_array($resultado))
{
if ($senha_dig == $senha_bd['senha'])
{
$_SESSION['autenticado'] = true;
$_SESSION['login'] = $senha_bd['login'];
$_SESSION["nivel"] = $nivel_user['nivel'];
?>
<script language="JavaScript">
window.location="home.php";
</script>
<?php }
}
else
{
?>
<script language="javascript"> alert("Usuário ou senha incorretos!");</script>
<?php }
}
}
?>Não amigo..
Você alterou..
$_SESSION["nivel"] = $nivel_user['nivel'];
é para continuar:
$_SESSION["nivel"] = $senha_bd['nivel'];
Se a sua chamada no banco é com senha_bd : $senha_bd = mysql_fetch_array($resultado)
Abraço.
Humm..mesmo assim ele não vai, ele me redireciona para a pagina index.php, porém não é a index do login, ele volta uma pasta aonde n tem index..
veja o link sistema
Veja só, não pode ser feito de uma forma mais simples? tipo eu coloco um include em cada página do tipo "se NIVEL do usuário tal for 1 então o usuário pode ficar na página, se for diferente a 1 redireciona para página de login ou joga um alert na tela e n abre a página..
Até pq o Admin vai ter que definir os níveis pelo sistema...
Você percebeu que você tbm alterou o SELECT que lhe enviei?
errado:
$sql = "SELECT senha, login FROM usuarios WHERE login='$usuario_dig' AND ativo='1'";
tem que selecionar o nivel tbm..
correto:
$sql = "SELECT senha, login, nivel FROM usuarios WHERE login='$usuario_dig' AND ativo='1'";humm..agora foii não me atentei na SELECT, agora me tire uma dúvida se eu quiser liberar acesso para os dois níveis em uma determinada página?
tentei fazer
<?php
$nivel_pag = 1 and 2 ;
include("include/verifica_aut.inc.php");
?>
e tmb tentei fazer
<?php
$nivel_pag = 1,2 ;
include("include/verifica_aut.inc.php");
?>
flw
Veja só,
na primeira página depois do login coloquei o seguinte
<?php
$nivel_pag = 0<2;
include("include/verifica_aut.inc.php");
?>
beleza, os dois logins entram na página porém em outra página fiz o seguinte
<?php
$nivel_pag = 0<1;
include("../include/verifica_aut.inc.php");
?>
os dois acessam e só o admin tinha q acessar..como posso fazer?
Tente...
<?php
$nivel_pag = 1;
include("../include/verifica_aut.inc.php");
?>
Na do admin coloca só o número 1..
Abraço.
>
Tente...
<?php
$nivel_pag = 1;
include("../include/verifica_aut.inc.php");
?>
Na do admin coloca só o número 1..
Abraço.
Cara muito bom ...valew pela ajuda mesmo deu certo, só tenho uma ultima dúvida, caso eu crie mais níveis de usuários tipo nível 1,2,3 e 4
como ficaria o code se eu quisesse por exemplo liberar acesso para o nível 1,3 e 4? como separo esses numeros?
<?php
$nivel_pag = 1;
include("include/verifica_aut.inc.php");
?>
vlw
>
Cara muito bom ...valew pela ajuda mesmo deu certo, só tenho uma ultima dúvida, caso eu crie mais níveis de usuários tipo nível 1,2,3 e 4
como ficaria o code se eu quisesse por exemplo liberar acesso para o nível 1,3 e 4? como separo esses numeros?
<?php
$nivel_pag = 1;
include("include/verifica_aut.inc.php");
?>
vlw
Opaa, resolvi aqui n sei se esta certo mas funcionou, simples mente repeti o o código embaixo..
<?php
$nivel_pag = 1;
$nivel_pag = 2;
include("../include/verifica_aut.inc.php");
?>
pode ser assim? tem alguma outra forma?
pode ser assim? tem alguma outra forma?
Errado..
Nesse caso $nivel_pag perde seu valor..
Bom, como você irá ter áreas assim, então vamos alterar um simples detalhe.
ao invés de declarar:
$nivel_pag = 1;
declare com arrays (no caso do seu exemplo)
$nivel_pag = array(1,3,4);
E na verificação vai ficar assim:
<?php
session_start();
$nivel == $_SESSION["nivel"];
if (!isset($_SESSION['autenticado']) || !in_array($nivel, $nivel_pag)){
unset($_SESSION);
session_destroy();
?>
<html>
<script language=javascript>
top.location.href = "../index.php";
</script>
</html>
<?php
exit();
}
?>
Então toda vez que quiser que certo nível tenha acesso a determinada página, adicione o número dele... ex:
Para os níveis: 4, 5, 1, 2 terem acesso a certa página:
$nivel_pag = array(4,5,1,2);
Abraço.
Correção..
Nesse caso $nivel_pag perde seu valor..
Nesse caso $nivel_pag perde seu valor inicial..
>
Errado..
Nesse caso $nivel_pag perde seu valor..
Bom, como você irá ter áreas assim, então vamos alterar um simples detalhe.
ao invés de declarar:
$nivel_pag = 1;
declare com arrays (no caso do seu exemplo)
$nivel_pag = array(1,3,4);
E na verificação vai ficar assim:
<?php
session_start();
$nivel == $_SESSION["nivel"];
if (!isset($_SESSION['autenticado']) || !in_array($nivel, $nivel_pag)){
unset($_SESSION);
session_destroy();
?>
<html>
<script language=javascript>
top.location.href = "../index.php";
</script>
</html>
<?php
exit();
}
?>
Então toda vez que quiser que certo nível tenha acesso a determinada página, adicione o número dele... ex:
Para os níveis: 4, 5, 1, 2 terem acesso a certa página:
$nivel_pag = array(4,5,1,2);
Abraço.
Ok deu certo, porém fiz uma alteração, tirei o session_destroy(); ,porque depois que ele verifica que o nível não tem acesso, eu mando ele redirecionar o usuário pra dentro do próprio sistema, ou seja ele n pode perder a sessão.
tmb coloquei um alert, assim o usuário fica ciente do que aconteceu.
<?php
session_start();
$nivel == $_SESSION["nivel"];
if (!isset($_SESSION['autenticado']) || !in_array($nivel, $nivel_pag)){
unset($_SESSION);
?>
<html>
<script language="javascript"> alert("Usuário sem permissão de acesso!");</script>
<script language=javascript>
top.location.href = "http://www.agenciago.com.br/sites/tuka_sistema/home.php";
</script>
</html>
<?php
exit();
}
?>
Aliás, você faz trabalhos freelancer? tenho algumas coisas pra fazer..se sim me passe seus contatos..
Preciso de mais uma ajuda, se alguem conseguir me dar uma luz agradeço, estou fazendo alguma coisa errada e deve ser algo simples vejam:
Conforme o nosso amigo acima me ajudou deu tudo certo fiz algumas alterações e ficou bacana, agora o problema é o seguinte vou colar o code abaixo pra deixar mais claro..
Com esse código eu libero acesso do admin na página que eu colocar esse código...
<?php
$login_pag = array(admin);
include("include/verifica_aut.inc.php");
?>
Com esse código se faz a validação:
<?php
session_start();
$login == $_SESSION["login"];
if (!isset($_SESSION['autenticado']) || !in_array($login, $login_pag)){
unset($_SESSION);
?>
<html>
<script language="javascript"> alert("Usuário sem permissão de acesso!");</script>
<script language=javascript>
top.location.href = "/home.php";
</script>
</html>
<?php
exit();
}
?>
Bom oque eu preciso fazer que não estou conseguindo ( comentei no codígo)
<?php
$login_pag = array(admin); //essa informação dentro do array "(admin)" preciso que seja selecionado do banco de dados, de uma coluna chamada "acesso01"
include("include/verifica_aut.inc.php");
?>
Vou postar aqui em baixo um teste que eu fiz e n deu certo
<?php
include("../include/conexao.inc.php")
$sql = "SELECT * FROM usuarios ORDER BY id DESC";
$resultado = mysql_query($sql);
while ($linha = mysql_fetch_array($resultado)) {
$id = $linha['id'];
$nome = $linha['acesso01'];
$login_pag = array(echo '$nome';);
include("include/verifica_aut.inc.php");
?>
qnd testei houve um erro na linha $sql = "SELECT * FROM usuarios ORDER BY id DESC";
Alguem sabe me ajudar como faço isso?
vlw
Quando o usuário logar, registre o nível dele em uma session, por ex. $_SESSION["nivel"];
Antes do include de verificação, em cada página você coloca uma variável com o nível da página..
ex..
<!-- head, body, códigos etc -->
E no verifica, crie outro if..
Abraço.