usuário com permissões

Enviada por Neto Sales 
Neto Sales
usuário com permissões
13 de June de 2020 às 01:22AM
Tenho um sistema de login funcionando, checando usuário e senha para autenticar. Tá tudo funcional até agora, mas surgiu a necessidade de criar permissões, e estou meio perdido. Já criei o item permissões na tabela, e tentei algumas implementações, mas até agora, nada funcionou. Ou não abre, ou abre permitindo tudo.

Atualmente funciona assim:

O arquivo abaixo verifica login e senha e dá acesso:

<?php
session_start();
include 'conexao/conexao.php';
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];

$sql = "SELECT * FROM usuarioX WHERE usuarioX = '$usuario'";
$busca = mysqli_query($conexao, $sql);

#Buscar senha

$dados = mysqli_fetch_array($busca);
$senhabd = $dados['senhaX'];

$senhaVerificada = ($senha);

#Verifica niveis de permissoes usuario

#QUERO COLOCAR AS PERMISSÕES AQUI
#Verifica se existe o usuario

$linha = mysqli_affected_rows($conexao);
if ($linha == 1) {
if ($senhabd == $senhaVerificada) {
$_SESSION['usuario'] = $usuario;
header('Location: index.php');
} else {
header('Location: login.php?id=1');

}
} else {

header('Location: login.php?id=2');

}
?>

No código acima, caso usuário e senha confira, ele direciona para o index, do contrário volta para o login. O que pretendo é acrescentar permissões de professor, aluno e pai. Tipo se 1 nas permissões, abrir o index. Se 2 nas permissões, abrir o aluno.php, e se 3 nas permissões, abrir o pai.php. Logo abaixo vou listar a página index, pois acredito que nela tem alguma ação que tá impedindo essa minha lógica. A idéia seria ter uma página dessa (index) para cada usuário, ou uma idéia melhor, caso alguém tenha.

<?php

session_start();
if (!isset ($_SESSION['usuario']) == true)
{
unset($_SESSION['login']);
header('Location: login.php');
}
$logado = $_SESSION['usuario'];
?>
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>
Dashboard -
</title>
<!-- Favicon -->
<link href="./assets/img/brand/favicon.png" rel="icon" type="image/png">
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
<!-- Icons -->
<link href="./assets/js/plugins/nucleo/css/nucleo.css" rel="stylesheet" />
<link href="./assets/js/plugins/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet" />
<!-- CSS Files -->
<link href="./assets/css/argon-dashboard.css?v=1.1.0" rel="stylesheet" />
</head>

<body>
<nav class="navbar navbar-vertical fixed-left navbar-expand-md navbar-light bg-white" id="sidenav-main">
<div class="container-fluid">
<!-- Toggler -->
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#sidenav-collapse-main" aria-controls="sidenav-main" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Brand -->
<a class="navbar-brand pt-0" href="./index.html">
<img src="./assets/img/brand/blue.png" class="navbar-brand-img" alt="...">
</a>
<!-- User -->
<ul class="nav align-items-center d-md-none">
<li class="nav-item dropdown">
<a class="nav-link nav-link-icon" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="ni ni-bell-55"></i>
</a>
<div class="dropdown-menu dropdown-menu-arrow dropdown-menu-right" aria-labelledby="navbar-default_dropdown_1">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="media align-items-center">
<span class="avatar avatar-sm rounded-circle">
<img alt="Image placeholder" src="./assets/img/theme/team-1-800x800.jpg
">
</span>
</div>
</a>
<div class="dropdown-menu dropdown-menu-arrow dropdown-menu-right">
<div class=" dropdown-header noti-title">
<h6 class="text-overflow m-0">Welcome!</h6>
</div>
<div class="dropdown-divider"></div>
<a href="#!" class="dropdown-item">
<i class="ni ni-user-run"></i>
<span>Logout</span>
</a>
</div>
</li>
</ul>
<!-- Collapse -->
<div class="collapse navbar-collapse" id="sidenav-collapse-main">
<!-- Collapse header -->
<div class="navbar-collapse-header d-md-none">
<div class="row">
<div class="col-6 collapse-brand">
<a href="./index.html">
<img src="./assets/img/brand/blue.png">
</a>
</div>
<div class="col-6 collapse-close">
<button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#sidenav-collapse-main" aria-controls="sidenav-main" aria-expanded="false" aria-label="Toggle sidenav">
<span></span>
<span></span>
</button>
</div>
</div>
</div>
<!-- Form -->
<form class="mt-4 mb-3 d-md-none">
<div class="input-group input-group-rounded input-group-merge">
<input type="search" class="form-control form-control-rounded form-control-prepended" placeholder="Search" aria-label="Search">
<div class="input-group-prepend">
<div class="input-group-text">
<span class="fa fa-search"></span>
</div>
</div>
</div>
</form>
<!-- Navigation -->
<ul class="navbar-nav">
<li class="nav-item class=" active" ">
<a class=" nav-link active " href=" index.php"> <i class="ni ni-tv-2 text-primary"></i> Dashboard
</a>
</li>
<li class="nav-item">
<a class="nav-link " href="#">
<i class="ni ni-satisfied text-orange"></i> Usuarios
</a>
</li>
<li class="nav-item" style="margin-left: 10px">
<a class="nav-link " href="tipoUsuario.php">
Cadastrar Tipo Usuario
</a>
</li>
<li class="nav-item" style="margin-left: 10px">
<a class="nav-link " href="usuario_hpac.php">
Cadastrar Usuario
</a>
</li>


<li class="nav-item">
<a class="nav-link " href="#">
<i class="ni ni-shop text-blue"></i> Empresas
</a>
</li>
<li class="nav-item" style="margin-left: 10px">
<a class="nav-link " href="ramoAtividade.php">
Cadastrar Ramo de Atividade
</a>
</li>
<li class="nav-item" style="margin-left: 10px">
<a class="nav-link " href="formularioPJ.php">
Cadastrar Empresa
</a>
</li>

<li class="nav-item">
<a class="nav-link " href="#">
<i class="ni ni-single-02 text-yellow"></i> Cliente
</a>
</li>
<li class="nav-item" style="margin-left: 10px">
<a class="nav-link " href="formularioCliente.php">
Cadastrar Cliente
</a>
</li>
<li class="nav-item">
<a class="nav-link " href="#">
<i class="ni ni-bullet-list-67 text-red"></i> Listar Tabelas
</a>
</li>
<li class="nav-item" style="margin-left: 10px">
<a class="nav-link " href="listarPJ.php">
Listar Empresas
</a>
</li>

<li class="nav-item">
<a class="nav-link" href="./examples/login.html">
<i class="ni ni-key-25 text-info"></i> Login
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./examples/register.html">
<i class="ni ni-circle-08 text-pink"></i> Register
</a>
</li>
</ul>
<!-- Divider -->
<!-- Heading -->
<!-- Navigation -->
</div>
</div>
</nav>
<div class="main-content">
<!-- Navbar -->
<nav class="navbar navbar-top navbar-expand-md navbar-dark" id="navbar-main">
<div class="container-fluid">
<!-- Brand -->
<a class="h4 mb-0 text-white text-uppercase d-none d-lg-inline-block" href="./index.html">Dashboard</a>
<!-- Form -->
<!-- User -->
<ul class="navbar-nav align-items-center d-none d-md-flex">
<li class="nav-item dropdown">
<a class="nav-link pr-0" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="media align-items-center">
<span class="avatar avatar-sm rounded-circle">
<img alt="Image placeholder" src="./assets/img/theme/team-4-800x800.jpg">
</span>
<div class="media-body ml-2 d-none d-lg-block">
<span class="mb-0 text-sm font-weight-bold"><?php echo $logado ?></span>
</div>
<div class="media-body ml-2 d-none d-lg-block">
<span class="mb-0 text-sm font-weight-bold"><?php echo $nivel ?></span>
</div>
</div>
</a>
<div class="dropdown-menu dropdown-menu-arrow dropdown-menu-right">
<div class=" dropdown-header noti-title">
<h6 class="text-overflow m-0">Bem-vindo</h6>
</div>
<div class="dropdown-divider"></div>
<a href="logout.php" class="dropdown-item">
<i class="ni ni-user-run"></i>
<span>Logout</span>
</a>
</div>
</li>
</ul>
</div>
</nav>
<!-- End Navbar -->
<!-- Header -->
<div class="header bg-gradient-primary pb-8 pt-5 pt-md-8">
<div class="container-fluid">
<div class="header-body">
<!-- Card stats -->

<div class="row">
<!-- inicio primeiro quadrado -->

<div class="col-xl-3 col-lg-6">
<div class="card card-stats mb-4 mb-xl-0">
<div class="card-body">
<div class="row">
<div class="col">
<h5 class="card-title text-uppercase text-muted mb-0">Empresas</h5>
<?php
include 'conexao/conexao.php';
$sql = "SELECT COUNT(id_empresa) as quantidade FROM empresa";
$busca = mysqli_query($conexao, $sql);
$dados = mysqli_fetch_array($busca);
$quantidade = $dados['quantidade'];
?>
<span class="h2 font-weight-bold mb-0"><?php echo $quantidade ?></span>
</div>
<div class="col-auto">
<div class="icon icon-shape bg-danger text-white rounded-circle shadow">
<i class="fas fa-chart-bar"></i>
</div>
</div>
</div>
<p class="mt-3 mb-0 text-muted text-sm">
<span class="text-nowrap"></span>
</p>
</div>
</div>
</div>
<!-- fim primeiro quadrado -->
<!-- inicio segundo quadrado -->

<div class="col-xl-3 col-lg-6">
<div class="card card-stats mb-4 mb-xl-0">
<div class="card-body">
<div class="row">
<div class="col">
<h5 class="card-title text-uppercase text-muted mb-0">Usuarios</h5>
<?php
include 'conexao/conexao.php';
$sql = "SELECT COUNT(id_usuario) as quantidade FROM usuario_hpac";
$busca = mysqli_query($conexao, $sql);
$dados = mysqli_fetch_array($busca);
$quantidade = $dados['quantidade'];
?>
<span class="h2 font-weight-bold mb-0"><?php echo $quantidade ?></span>
</div>
<div class="col-auto">
<div class="icon icon-shape bg-danger text-white rounded-circle shadow">
<i class="fas fa-chart-pie"></i>
</div>
</div>
</div>
<p class="mt-3 mb-0 text-muted text-sm">
<span class="text-nowrap"></span>
</p>
</div>
</div>
</div>
<!-- fim segundo quadrado -->

<div class="col-xl-3 col-lg-6">
<div class="card card-stats mb-4 mb-xl-0">
<div class="card-body">
<div class="row">
<div class="col">
<h5 class="card-title text-uppercase text-muted mb-0">Alugados</h5>
<?php
include 'conexao/conexao.php';
$sql = "SELECT COUNT(id_status_imovel) as quantidade FROM status_imovel WHERE status_imovel = 'Aluguel'";
$busca = mysqli_query($conexao, $sql);
$dados = mysqli_fetch_array($busca);
$qtdaluguel = $dados['quantidade'];

?>


<span class="h2 font-weight-bold mb-0"><?php echo $qtdaluguel ?></span>
</div>
<div class="col-auto">
<div class="icon icon-shape bg-yellow text-white rounded-circle shadow">
<i class="fas fa-users"></i>
</div>
</div>
</div>
<p class="mt-3 mb-0 text-muted text-sm">
<?php
$sql3 = "SELECT SUM(valor_negocio)as valortotal FROM status_imovel WHERE status_imovel = 'Aluguel'";
$query = mysqli_query($conexao, $sql3);
$dados3 = mysqli_fetch_array($query);
$totalAluguel = $dados3['valortotal'];
$totalAluguel;
$porcento = $totalAluguel * 0.10;
?>
<span class="text-success mr-2"><i class="fas fa-arrow-up"></i><?php echo number_format($porcento, 2, ',', '.') ?></span>
<span class="text-nowrap">Lucro Alugueis</span>
</p>
</div>
</div>
</div>
<div class="col-xl-3 col-lg-6">
<div class="card card-stats mb-4 mb-xl-0">
<div class="card-body">
<div class="row">
<div class="col">
<h5 class="card-title text-uppercase text-muted mb-0">Lucro Bruto</h5>
<?php
$totalbruto = $porcento + $total;

?>
<span class="h2 font-weight-bold mb-0"><?php echo number_format($totalbruto, 2, ',', '.') ?></span>
</div>
<div class="col-auto">
<div class="icon icon-shape bg-info text-white rounded-circle shadow">
<i class="fas fa-percent"></i>
</div>
</div>
</div>
<p class="mt-3 mb-0 text-muted text-sm">
<?php
if($totalbruto > 0) {?>
<span class="text-success mr-2"><i class="fas fa-arrow-up"></i>Saldo Positivo</span>
<?php } else {?>
<span class="text-danger mr-2"><i class="fas fa-arrow-down"></i>Saldo Negativo</span>
<?php }?>

</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

</body>
</html>
Diante disso, quero que alguém poste aqui uma sugestão contemplando os dois códigos, pois acredito que na primeira verificação usando AND ou WHERE eu estou acertando, mas o grande problema está na abertura da próxima página, que não estou conseguindo fazer. Acho que até checo a tabela, mas não estou conseguindo direcionar para a página certa.
Trambulhao
Re: usuário com permissões
25 de July de 2020 às 02:52PM
<?php
session_start();
include 'conexao/conexao.php';

$usuario = filter_input(INPUT_POST, 'usuario');
$senha = filter_input(INPUT_POST, 'senha');

$busca = mysqli_query($conexao, "SELECT * FROM usuarioX WHERE usuarioX = '$usuario'");
$dados = mysqli_fetch_array($busca);
$linha = mysqli_affected_rows($conexao);

if ($linha !== 1 or !password_verify($senha, $dados['senhaX'])) {
header('Location: login.php');
exit;
}

$_SESSION['usuario'] = [
'username' => $usuario,
'permissao' => $dados['permissao']
] ;

// ATENÇÃO! usar o operador idêntico "===", não o igual "=="
if ($_SESSION['usuario']['permissao'] === 1) {
header('Location: professor.php');
exit;
}
elseif ($_SESSION['usuario']['permissao'] === 2) {
header('Location: aluno.php');
exit;
}
elseif ($_SESSION['usuario']['permissao'] === 3) {
header('Location: pai.php');
exit;
}
else {
header('Location: index.php');
exit;
}

// No topo dos arquivos (professor, aluno ou pai) adiciona a protecção para cada uma, exemplo..

// professor.php
if ($_SESSION['usuario']['permissao'] !== 1) {
header('Location: logout.php'); // ou index.php ou uma página de "Não autorizado"
exit;
}
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.