Incluir nível de acesso ao login


(Elicarlos Cezário) #1

Bom dia,
Estou começando agora no universo da programação PHP e com a ajuda de uns tutoriais estou montando um sistema de login.
Essa etapa consegui, porém estou tentando colocar níveis de acesso ao fazer o login. No meu banco de dados no PHPmyAdmin criei uma coluna com o nome “nível”.
Gostaria de saber como coloco cada usuario ao ser logado ser redirecionado diretamente para uma página de acordo com o seu nível colocado na tabela.

Os códigos da página de login e a de validação para entenderem melhor o que foi feito:
index.php

<?php
    if(isset($_GET['msg'])){
        $msg = $_GET['msg'];

        switch($msg){
            case 1:
            ?>
                <div class="message">
                    <div class="alert alert-danger">
                        <a href="index.php" class="close" data-dismiss="alert">&times</a>
                        Email ou Senha errados tente outra vez.
                    </div>
                </div>
            <?php
            break;
            case 2:
            ?>
                <div class="message">
                    <div class="alert alert-danger">
                        <a href="index.php" class="close" data-dismiss="alert">&times</a>
                        Você não tem permissão para acessar esta página.
                    </div>
                </div>
            <?php
            break;
            case 3:
            ?>
                <div class="message">
                    <div class="alert alert-success">
                        <a href="index.php" class="close" data-dismiss="alert">&times</a>
                        Logout realizado com sucesso.
                    </div>
                </div>
            <?php
            break;
        }
    }
 ?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Login</title>
    <link rel="stylesheet" href="css/estilo.css">
    <link rel="stylesheet" href="css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <form action="autenticar.php" method="post" class="form-login">
            <h2 class="form-login-heading">Entre com o usuário</h2>
            <label for="inputUsuario" class="sr-only">Usuario</label>
            <input type="text" id="inputUsuario" name="inputUsuario" class="form-control" placeholder="Usuario" required autofocus>
            <label for="inputPassword" class="sr-only">Senha</label>
            <input type="password" id="inputPassword" name="inputPassword" class="form-control" placeholder="Senha" required>
            <div class="checkbox">
                <label><input type="checkbox"value="esqueci">Esqueci a senha</label>
            </div>
            <button type="submit" class="btn btn-lg btn-primary btn-block">Entrar</button>

        </form>
    </div>
</body>
</html>

autenticar.php

<?php
    require ("db.php");

    $email = $_POST['inputUsuario'];
    $senha = md5($_POST['inputPassword']);
    

    $query = mysqli_query($conn,"SELECT * FROM usuarios WHERE email = '$email' AND senha = '$senha'");
    $row = mysqli_num_rows($query);

    if ($row > 0){
        session_start();
        $_SESSION['email'] = $_POST['inputUsuario'];
        $_SESSION['senha'] = $_POST['inputPassword'];
        header('Location: dashboard.php');
    }else{
        header('Location: index.php?msg=1');
    }
?>

(Jonatan Santana) #2

Quando estiver comparando os dados da tabela com os digitados no form, você já trás a coluna “nivel”.
Compara se o nivel do usuario que veio do banco (O mesmo que o usuario tenta acessar) é igual ao nivel que você quer e o redireciona de acordo ao nivel.


(Luan Maik) #3

"SELECT codigo, nome, email, nivel FROM usuarios WHERE email = ‘$email’ AND senha = ‘$senha’ "

Observações sobre o código demonstrado:

1 - NUNCA coloque o parametro recebido diretamente na query Ex: WHERE email = '$email' , sua aplicação pode sobrer um Sql Injection (estude sobre);

2 - Qual a necessidade de guardar a senha do usuário na sessão?

3 - Os dados armazenados na sessão ($_SESSION) devem ser os dados retornados do banco de dados e não os passados pelo $_POST, estude melhor sobre a conexão do mysqli e como pegar os dados retornado do SELECT.