Ir para conteúdo
Jack Oliveira

Permitir acesso por nível por URL das Páginas

Recommended Posts

Ola @Omar~ e @Motta

 

fiz um sistema de permissao por paginas

no caso em meu banco de dados tenho mais de 20 paginas no admin

eu tenho os seguinte nivel de acessos

WebMaster - Nivel (1) 

Administrador - Nivel (2)

Editor - (3)

 

E o código fiz da seguinte forma no function.php


// Verifica se o usuário tem permissão para acessar o módulo
    function VerificaPermissao($URL){
        $IDUsuario = DadosSession('id');

        $Query = DBRead('usuarios','permissao',"WHERE id = '{$IDUsuario}'"); foreach ($Query as $usuarios) {
            $ModulosPermitidos = $usuarios['permissao'];
            if (empty($ModulosPermitidos)) {
                return true;
            } elseif (!empty($ModulosPermitidos)) {
                if (strpos($ModulosPermitidos, $URL) !== TRUE) {
                    return true;
                } else {
                    return false;
                }
            }
        }
    }

ele funciona de boa ao dar permissao 

porem se um cara muito legal ele ter acesso por ex meusite.com/admin/post.php

se ele ir e trocar o post.php

por 

meusite.com/admin/album.php  ele consegue acessar a pagina que não é pra ele acessar.

 

 

Alguem ai poderia me dar uma ajuda ai de como resolver...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É muito simples, basta fazer um verificação em cada página(ou arquivo "depende a arquitetura") se aquele usuário tem permissão de acesso.

 

Só uma coisa diria a você que mudasse....

Criar uma tabela só de permissão; digamos então que essa seria a tabela:

CREATE TABLE `permitir` (
    `id` int(9) NOT NULL AUTO_INCREMENT,
    `usuario_id` int(9) NOT NULL AUTO_INCREMENT COMMENT 'adicionamos aqui o id do usuario que pode acessar a página',
    `pagina` varchar(200) DEFAULT NULL COMMENT 'adicionamos aqui a informação da página que ele pode acessar',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Então nossa query fica muito prática

SELECT * FROM permitir WHERE usuario_id = '{$ID_DO_USUARIO}' AND pagina = '{$URL}'

Então é só verificar isso a cada página ou arquivo que o usuário acessar.

Se não há retorno da query é porque aquele id do usuário não está registrado na tabela ou seu id não condiz com a página que ele acessou junto ao valor da tabela na coluna "pagina".

 

Citar

Uma ressalva:

Sessões/cookies podem ser fraudados, logo a consulta do usuário pelo lado do servidor assim como fez é uma medida de segurança bem drástica, mas necessário em alguns casos extremos.

No entanto a verificação por ID não é a ideal, se por sua vez além do próprio usuário ter acesso ao seu ID, ou seja se todo mundo pode saber qual o ID do administrador por exemplo, basta uma pessoa falsificar isso e terá acesso administrativo.

Outro caso é que normalmente o "ID 1" é o administrador.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 10/12/2019 at 15:40, Omar~ disse:

É muito simples, basta fazer um verificação em cada página(ou arquivo "depende a arquitetura") se aquele usuário tem permissão de acesso.

 

Só uma coisa diria a você que mudasse....

Criar uma tabela só de permissão; digamos então que essa seria a tabela:


CREATE TABLE `permitir` (
    `id` int(9) NOT NULL AUTO_INCREMENT,
    `usuario_id` int(9) NOT NULL AUTO_INCREMENT COMMENT 'adicionamos aqui o id do usuario que pode acessar a página',
    `pagina` varchar(200) DEFAULT NULL COMMENT 'adicionamos aqui a informação da página que ele pode acessar',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Então nossa query fica muito prática


SELECT * FROM permitir WHERE usuario_id = '{$ID_DO_USUARIO}' AND pagina = '{$URL}'

Então é só verificar isso a cada página ou arquivo que o usuário acessar.

Se não há retorno da query é porque aquele id do usuário não está registrado na tabela ou seu id não condiz com a página que ele acessou junto ao valor da tabela na coluna "pagina".

 

 

Ola @Omar~ bom dia perdoa a demora aqui

poderia me dar uma ajuda nesta parte que tu disse aqui em questão de segurança como posso proteger o administrador??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

×

Informação importante

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