Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rcamu

Menu por nível de acesso

Recommended Posts

Hoje eu consegui montar assim:

Em cada pagina coloquei o cód abaixo onde identifico  o nível do usuário 

<?php
session_start();
$nivel = 2;
set_time_limit(0);
date_default_timezone_set('America/Sao_Paulo');
include 'adm/config.php';
include 'adm/functions.php';
include 'adm/menu.php';
include("adm/seguro.php");

?>

A pagina seguro que verifica as permissões está assim:

Ele verificar o nível que está na pagina que o usuário que acessar, por exemplo se na pagina estiver $nivel=1 e o usuário for nível 2 ele 

da a mensagem : Você não tem o nível de acesso para essa página

<?php

// QUANDO TENTANDO LOGAR
if(isset($_POST['acesso'])=="Logar") {

// VERIFICANDO SE USUÁRIO E SENHA ESTÃO VAZIOS
if(isset($_POST['usuario'])=="" || isset($_POST['senha'])=="") {
echo "Os dados de acesso devem ser preenchidos";
exit;
}

// LOGANDO E CRIANDO AS SESSIONS
$logar = mysqli_query($conexao,"SELECT usuario, senha, nivel FROM acesso WHERE usuario='".anti_injection($_POST['usuario'])."' AND senha='".anti_injection(md5($_POST['senha']))."' AND nivel='".anti_injection($nivel)."'");
if(mysqli_num_rows($logar) >= 1) {
$_SESSION['usua'] = $_POST['usuario'];
$_SESSION['senh'] = md5($_POST['senha']);
echo "<script>
alert('Acesso permitido');
location.href='index.php';
</script>";
} else {
echo "<script>
alert('Acesso restrito');
</script>";
}

}

// VERIFICANDO SE O NÍVEL DA PÁGINA É VÁLIDA PARA O USUÁRIO LOGADO
if(@$_SESSION['usua'] AND @$_SESSION['senh']) {
$verifica_nivel = mysqli_query($conexao,"SELECT usuario, senha, nivel FROM acesso WHERE usuario='".anti_injection($_SESSION['usua'])."' AND senha='".anti_injection($_SESSION['senh'])."' AND nivel='".anti_injection($nivel)."'");
if(mysqli_num_rows($verifica_nivel) >= 1) {
// ACESSO CORRETO
} else {
echo "<script>
alert('Você não tem o nível de acesso para essa página');
history.back();
</script>";
exit;
}
}

// CASO NÃO LOGADO, MOSTRA O FORMULÁRIO
if(!isset($_SESSION['usua']) OR !isset($_SESSION['senh']) OR $_SESSION['usua']=="" OR $_SESSION['senh']=="") {

?>

<?php
$qr=mysqli_query($conexao,"SELECT DISTINCT usuario FROM `acesso` ORDER BY `acesso`.`usuario` ASC");
if (mysqli_num_rows($qr)==0)
	echo "Adicione ao menos um Usuário";

else{
          }  ?>

 

Desse jeito funciona belezinha, só que queria pegar esse nível no BD e mostrar menus diferentes. E não posso deixar de setar em cada pagina o nivel de acesso dela para evitar que seja acessada pelo link direto da pagina.

Exemplo:

Se for nivel=1 ele mostra o include 'adm/menu1.php';

Se for nivel=2 ele mostra o include 'adm/menu2.php';

 

E tem um problema o nivel 1 é adm além das paginas que tem acesso ele também pode acessar as paginas do nivel 2 que é adm.

 

Alguém pode me dar uma luz como pode ser feito isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até ai normal, mas o problema é que no menu1.php eu vou colocar as paginas que o nível de acesso é 2 ai pela validação da pagina ele não deixa acessar pois o nível que está na pagina é 2 e o usuário é nível 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

para evitar que o usuario final acesse uma página diretamente você pode alterar o nível de acesso do arquivo no servidor para 740. assim ele vai continuar acessivel para o script que chama ele por include, mas não será acessivel para ser chamado pelo endereço no browser.

 

eu colocaria esse script de verificação de nível todo em um arquivo a ser chamado por include em cada página também por que pelo que disse ele se repete em várias páginas. apenas o nível da página que seria diferente em cada página. Em alguns sites meus uso um arquivo específico para abrir sessão e criar variáveis com os valores da sessão atual.

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, ClickSistema disse:

eu colocaria esse script de verificação de nível todo em um arquivo a ser chamado por include em cada página também por que pelo que disse ele se repete em várias páginas. apenas o nível da página que seria diferente em cada página. Em alguns sites meus uso um arquivo específico para abrir sessão e criar variáveis com os valores da sessão atual.

 

Poderia enviar algum exemplo de como fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 horas atrás, Bergs disse:

Na query você coloca nivel <= variavel_nivel 

 

Se eu coloco nas paginas assim:

 

$nivel >= 1;

 

Quando a pagina é $nivel = 2 e usuario é  $nivel >= 1 ele da que o acesso é restrito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.