Ir ao conteúdo
  • Cadastre-se

PHP Sessions diferentes para cada nível de acesso


Ir à solução Resolvido por joseph_dev,

Posts recomendados

Olá pessoal!
Sou iniciante na linguagem. Estou criando um CRUD para o serviço, onde terei 3 niveis de acessos.

NÍVEIS:

1 - Administrador (Cadastra e exclui e edita as informações)

2 - Colaborador (Apenas cadastras informações)

3 - Usuario (Apenas lê as informações)

 

Adicionei um script onde ao logar, o sistema redireciona conforme o nível:

 

Parte do codigo que redireciona:

// O usuário está logado
        $_SESSION['logado']       = true;
        $_SESSION['nome_usuario'] = $fetch_usuario['user_name'];
        $_SESSION['usuario']      = $fetch_usuario['user'];
        $_SESSION['user_id']      = $fetch_usuario['user_id'];
        $_SESSION['nivel']      = $fetch_usuario['nivel'];
          if($_SESSION['nivel'] == "1"){
                header("Location: administrador.php");
            }elseif($_SESSION['nivel'] == "2"){
                header("Location: colaborador.php");
                }elseif($_SESSION['nivel'] == "3"){
                header("Location: usuario.php");
            }

 

 

 

 

VERIFICA_LOGIN.php

<?php
// Verifica se estamos conectados ao BD
if ( ! isset( $conexao_pdo ) || ! is_object( $conexao_pdo ) ) {
    exit('Erro na conexão com o banco de dados.');
}

// Une $_SESSION e $POST para verificação
if ( isset( $_POST ) && ! empty( $_POST ) ) {
    $dados_usuario = $_POST;
} else {
    $dados_usuario = $_SESSION;
}

// Verifica se os campos de usuário e senha existem
// E se não estão em branco
if ( 
    isset ( $dados_usuario['usuario'] ) && 
    isset ( $dados_usuario['senha'] )   &&
  ! empty ( $dados_usuario['usuario'] ) &&
  ! empty ( $dados_usuario['senha'] ) 
) {
    // Faz a consulta do nome de usuário na base de dados
    $pdo_checa_user = $conexao_pdo->prepare('SELECT * FROM usuarios WHERE user = ? LIMIT 1');
    $verifica_pdo = $pdo_checa_user->execute( array( $dados_usuario['usuario'] ) );
    
    // Verifica se a consulta foi realizada com sucesso
    if ( ! $verifica_pdo ) {
        $erro = $pdo_checa_user->errorInfo();
        exit( $erro[2] );
    }
      // Busca os dados da linha encontrada
    $fetch_usuario = $pdo_checa_user->fetch();
   // Verifica se a senha do usuário está correta
    if ( crypt( $dados_usuario['senha'], $fetch_usuario['user_password'] ) === $fetch_usuario['user_password'] ) {
        // O usuário está logado
        $_SESSION['logado']       = true;
        $_SESSION['nome_usuario'] = $fetch_usuario['user_name'];
        $_SESSION['usuario']      = $fetch_usuario['user'];
        $_SESSION['user_id']      = $fetch_usuario['user_id'];
        $_SESSION['nivel']      = $fetch_usuario['nivel'];
          if($_SESSION['nivel'] == "1"){
                header("Location: administrador.php");
            }elseif($_SESSION['nivel'] == "2"){
                header("Location: colaborador.php");
                }elseif($_SESSION['nivel'] == "3"){
                header("Location: usuario.php");
            }     

    } else {
        // Continua deslogado
        $_SESSION['logado']     = false;
        // Preenche o erro para o usuário
        $_SESSION['login_erro'] = 'Usuário ou senha inválidos';
    }
}
?>

 

O problema é que quando eu logo como por exemplo como nível 3 (usuario.php), se eu apagar o usuario.php apos a barra e colocar administrador.php ou colaborador.php, o sistema aceita. 

Haveria uma maneira de barrar isto onde o usuário somente teria acesso na pagina respectiva ao seu nível de acesso?

Link para o comentário
Compartilhar em outros sites

  • Solução

Seu site tem um controlador que gerencia as rotas? Se não tem, o mais simples é você verificar o nível do usuário em cada uma das 3 páginas do seu site.

Ex na página administrador.php:

if($_SESSION['nivel'] != "1"){
  exit('Você não tem permissão para acessar essa página.');
}

 

Tem outras formas mais elegantes de fazer isso, mas se tratando apenas de um projeto de CRUD, acredito que didático, já resolve a situação.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Marcelocjbh  Talvez esse post possa te ajudar a clarear as ideias de implementação:

 

A parte que te interessa é essa do código:

 

<?php
session_start();
setcookie("ck_authorized", "true", 0, "/");

/*testa se a sessão tem valor.
  Refere-se a linha lá no arquivo de login onde
  é inserido o login na sessão. */
if(!isset($_SESSION["login"])):
    header("location: index.php");
else:
    $login = $_SESSION["login"];
endif;    
?>

Ele é o responsável pela verificação se está logado no sistema. Você pode alterar, para ele verificar o nível também e redirecionar para o lugar certo.

Link para o comentário
Compartilhar em outros sites

21 horas atrás, joseph_dev disse:

Seu site tem um controlador que gerencia as rotas? Se não tem, o mais simples é você verificar o nível do usuário em cada uma das 3 páginas do seu site.

Ex na página administrador.php:



if($_SESSION['nivel'] != "1"){
  exit('Você não tem permissão para acessar essa página.');
}

 

Tem outras formas mais elegantes de fazer isso, mas se tratando apenas de um projeto de CRUD, acredito que didático, já resolve a situação.

Coloquei aqui conforme sua orientação e deu certo.
Adicionei isto nos cabeçalhos de cada pagina, informando o nível que necessito. Foi perfeito.
Muito obrigado pela orientação!

 

 

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

21 horas atrás, DiF disse:

@Marcelocjbh  Talvez esse post possa te ajudar a clarear as ideias de implementação:

 

A parte que te interessa é essa do código:

 



<?php
session_start();
setcookie("ck_authorized", "true", 0, "/");

/*testa se a sessão tem valor.
  Refere-se a linha lá no arquivo de login onde
  é inserido o login na sessão. */
if(!isset($_SESSION["login"])):
    header("location: index.php");
else:
    $login = $_SESSION["login"];
endif;    
?>

Ele é o responsável pela verificação se está logado no sistema. Você pode alterar, para ele verificar o nível também e redirecionar para o lugar certo.

 

Vou realizar as devidas mudanças conforme você me orientou. Muito obrigado por compartilhar com a gente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!