Tutorial nivel de acesso Nesse post mostro um exemplo bem simples de script de login com nível de acesso usando banco de dados MySQL, onde cada usuário logado terá acesso somente a página que o administrador desejar.
Funciona da seguinte forma: Um usuário previamente cadastrado no banco de dados, vai acessar um documento do site. Nesse documento, vai ter definido em um variável o nível de acesso necessário para acesso a ela. Se o usuário não estiver logado, irá ser mostrado a ele um formulário para que ele entre com os dados de acesso para fazer o login. Após logado, cada página que o usuário acessar será verificado o nível de acesso que a página tem, e verificado se o usuário logado pode acessar a mesma.
Criar uma tabela no banco de dados denominada usuario CREATE TABLE IF NOT EXISTS `usuario` ( `id` INT(11) NOT NULL, `usuario` VARCHAR(15) NOT NULL, `senha` VARCHAR(32) NOT NULL, `nivel` INT(11) NOT NULL ) INSERT INTO `acesso` (`id`, `usuario`, `senha`, `nivel`) VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 1);
Fazer a página de conexao.php <?php // CONEXÃO $dbhost="localhost"; /* servidor */ $dbuser=""; /* usuário do banco de dados */ $dbpasswd=""; /* senha do banco de dados */ $dbname=""; /* nome do banco de dados */ $conexao = mysql_connect($dbhost, $dbuser, $dbpasswd) or die ("não foi possível a conexão, verifique os dados."); mysql_select_db($dbname) or die ("não foi possível o acesso ao banco de dados $dbname.");
// ANTI-INJECTION function anti_injection($sql){ $sql = preg_replace("/( from |select|insert|delete|where|drop table|show tables|#|\*|-|\\\\)/", "" ,$sql); $sql = trim($sql); $sql = strip_tags($sql); $sql = (get_magic_quotes_gpc()) ? $sql : addslashes($sql); return $sql; } ?>
Fazer a página que será protegida página a ser protegida A página que será protegida precisa seguir um padrão. No topo das páginas que serão protegidas deve ter o seguinte: <?php // INICIANDO A SESSION
session_start(); // NÍVEL NECESSÁRIO PARA VER A PÁGINA ATUAL $nivel = 1; // INCLUDE DO ARQUIVO DE CONFIGURAÇÃO E DO ARQUIVO seguro.php include("config.php"); include("seguro.php"); ?> CONTEÚDO DO ARQUIVO
Como adicional, você pode colocar esse código abaixo para quando o usuário estiver logado, ter um link para deslogar. <?php if(isset($_SESSION['usuario']) OR isset($_SESSION['senha'])) { echo "<a href=\"deslogar.php\">deslogar</a>"; } ?>
deslogar.php CÓDIGO: SELECIONAR TODOS TESTAR HTML TESTAR PHP TESTAR MYSQL COMO FUNCIONA <?php session_start(); session_destroy(); header("Location: index.php"); exit; ?>
O arquivo seguro.php deve ter o seguinte conteúdo: CÓDIGO: SELECIONAR TODOS TESTAR HTML TESTAR PHP TESTAR MYSQL COMO FUNCIONA <?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 = mysql_query("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(mysql_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 = mysql_query("SELECT usuario, senha, nivel FROM acesso WHERE usuario='".anti_injection($_SESSION['usua'])."' AND senha='".anti_injection($_SESSION['senh'])."' AND nivel='".anti_injection($nivel)."'"); if(mysql_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;