[RESOLVIDO] Permissão de acesso

Estou desenvolvendo um projeto básico de sistema escolar, no mesmo estou a criar painéis com determinadas funções para cada tipo de funcionário.

Consegui com êxito fazer o redirecionamento do funcionário para o seu painel, porém não consegui bloquear o acesso do mesmo em outros painéis caso digite o link diretamente.

Meu redirecionamento está assim:

    <?php
//Área restrita para exatamente usuários de níveis específicos, esses dados está enumerados
//conforme no banco de dados, sendo assim 1 (professor), 2(diretor), 3(secretaria) e 3(aluno)
session_start();
if(isset($resultado))
{
    $_SESSION['cpf'] = $resultado['cpf'];
    $_SESSION['nome'] = $resultado['nome'];
    $_SESSION['funcao'] = $resultado['funcao_idfuncao'];
    $_SESSION['email'] = $resultado['email'];
    if($_SESSION['funcao'] == "1"){
        header("Location: ../sistema/painel-professor.php");
    }elseif($_SESSION['funcao'] == "2"){
        header("Location: ../sistema/painel-diretor.php");
    }elseif($_SESSION['funcao'] == "3"){
        header("Location: ../sistema/painel-secretaria.php");
    }elseif($_SESSION['funcao'] == "4"){
        header("Location: ../sistema/painel-aluno.php");
    }
}

A minha tentativa falha de bloquear os acessos foi assim:

<?php
include('../classes/verifica_login.php');

    if(!isset($_SESSION["funcao"]) == "2"){ 
        echo "not ok"; 
    }else{
        echo "ok";
    }

Qual é o meu erro aqui?

Você tem que checar se a pagina tem permissão ou não, no inicio do arquivo de cada página no top como primeiros comandos.

Encontrei o erro.

Estava tentando usar isset em booleano.

O correto é:

include('../classes/verifica_login.php');
if ($_SESSION["funcao"]  == "2"){ 
    echo "ok"; 
    }
    else{
        echo "not ok";
    }

De qualquer forma me ajudou, ao colar no topo da página percebi o erro.

Na verdade o seu código tem problemas, porque o correto seria:

include('../classes/verifica_login.php');
if (isset($_SESSION["funcao"]) && $_SESSION["funcao"] == "2")
{ 
	echo "ok"; 
}
else
{
	echo "not ok";
}

Sempre verifique se existe, depois verifique o seu conteúdo.

1 curtida

Entendi, mais uma coisa!
Eu quero dar acesso ao painel de aluno para todos os funcionários, basta utilizar desta forma:

<?php
if (isset($_SESSION["funcao"]) && $_SESSION["funcao"] == "1") && $_SESSION["funcao"] == "2") && $_SESSION["funcao"] == "3") && $_SESSION["funcao"] == "4")

?

Tem que usar um OR (||) porque o tipo tem que estar contido e sendo verdadeiro uma vez passa, exemplo:

<?php
if (isset($_SESSION["funcao"]) && 
	($_SESSION["funcao"] == "1"
	|| $_SESSION["funcao"] == "2"
	|| $_SESSION["funcao"] == "3" 
	|| $_SESSION["funcao"] == "4"))
{

}

?>

ou melhor ainda

<?php
if (isset($_SESSION["funcao"]) 
    && in_array($_SESSION["funcao"],["1","2","3","4"]))
{

}

Ref. in_array

1 curtida

Putz, muito bom, sanou minha dúvida e está funcionando aqui. Vou implementar no restante do sistema! Muito obrigado.

1 curtida