Ir ao conteúdo
  • Cadastre-se

Desenvolver um painel de controle com políticas de acesso.


Posts recomendados

Olá pessoal beleza ?
Eu preciso desenvolver um painel de controle com políticas de acesso de usuários. por exemplo:
usuário administrador: tem acesso totar ao sistema.
usuário avançado: tem um acesso com alguns privilégios.
usuário comum: um acesso restrito.
minha dúvida é a seguinte, como irá funcionar a estrutura de diretórios para cada usuário ?
teria outra forma fazer sem ser por pastas ? 
 

OBS: tenho conhecimento em php intermediário/ avançado, jquery, jquery-validate, e jquery-datatables.
Ainda não comecei a fazer a codificação. por enquanto estou pensando no projeto. e nas suas funcionalidade.
 

Estou pensando em fazer com o php.  :thumbsup:

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Murilo Vanucci Basicamente não precisa separar por "pastas"

 

Já que o conteúdo será controlado pelo nível de acesso.. por exemplo.. na sua tabela de "acessos" terá um campo int...  contendo 1, 2 ou 3... para usar como chave de acesso.

Aí você cria uma página que mostre os dados de acordo com o nível de acesso.

 

Dependendo do nível de usuário podes desabilitar botões e recursos...  ou simplesmente fazer arquivos diferentes para mostrar coisas diferentes.. 

PS: podes por tudo em um diretório.. para não ter que criar pastas separadas

PS2: é imprescindível que uses o php.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Murilo Vanucci Depende...até onde seu conhecimento vai.. e do tipo de coisas que estas fazendo...

Orientada a objetos é mais robusto, permite desenvolver por modulos... e implementa-los... com isso poderias trabalhar com terceiros por exemplo.. alguém desenvolver um plugin  e etc...

Já o modo estruturado não permite.. . mas é mais fácil, eu acho que primeiro tens que dominar o modo procedural antes de se dedicar ao orientada a objetos.

Link para o comentário
Compartilhar em outros sites

@dif Estou pensando em fazer orientado a objetos, para adquirir experiências. Eu estou fazendo faculdade de Tecnologia Analise e desenvolvimento de sistemas, e preciso fazer um sistema para a empresa em que eu trabalho por módulos. Pois futuramente terei que fazer manutenção no código e adicionar novas funcionalidades.

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Murilo Vanucci Sim, nesse ponto a OO resolve mesmo.

Mas cuide... o ADS não ensina quase nada.... eu sou formado em ADS.. e te digo.. aprendi praticamente tudo por fora... lá os caras só te ensinam o básico.

É tipo "ensine o pescador a pescar".

 

Recomendo leituras do livre do Pablo Dall'Oglio sobre php orientada objetos. é um dos melhores que já li. 

Link para o comentário
Compartilhar em outros sites

@dif Valeu ! vou pesquisar e estudar esse livro.
Estou pensando em fazer a UML do sistema em que eu estou planejando.
Na faculdade eles ensinam a engenharia de software, UML e o básico de programação OO.
como você usa esses conceitos na prática ?
Por exemplo eu sei codificar uma classe, e instanciar o objeto. Fico um pouco perdido na hora de usar

o conceito de engenharia de software e UML na prática. 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Murilo Vanucci  Bom, o conceito de engenharia é usado para modelar seu UML. 

 

O UML praticamente mostra como seu sistema vai funcionar...  quais classes possuem quais métodos,  a qual se referem.. e etc.

é como se fosse o "manual" de entendimento do seu sistema.

 

é imprescindível que comeces a modelagem pelo caso de uso...  e aí vai abrindo o leque... e modelando o UML. 

A engenharia de software vai servir para você criar a documentação necessária para que outros possam entender seu sistema.. ou seja, quanto estiveres trabalhando em equipe,, onde requer que outros prestem manutenção e desenvolvimento ao sistema.

 

O ideal, é você fazer isso antes de implementar na prática... Não sei em que semestre você está,.. mas isso é bem focado geralmente no final... do curso pelo 4 ou 5 semestre.

Pelo menos foi assim na FATEC, a faculdade na qual sou formado.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@dif surgiu outra duvida.

Por exemplo se eu tenho uma tabela com o os campos: id, login, senha, e função;
e a função ser a minha chave primária para determinar o nível de acesso. Quando eu configuro o meu código chec_login.php :

 

//ini_set('display_errors', 1);
//ini_set('display_startup_erros', 1);
//error_reporting(E_ALL);


$usuario = $_REQUEST["usuario"];
$senha = $_REQUEST["senha"];


if (empty($usuario) or empty($senha)) {
    echo '<script>'
    . ' alert ("Preencha o campos usuário e senha corretamente.");'
    . 'history.go(-1);'
    . '</script>';
} else {

    $mysql = new mysqli('localhost', 'filial85', 'senhafilial', 'atacadao');
    $q = "select login, senha, funcao from tb_usuario_f85 where login = ? and senha = ?";
    $sql = $mysql->prepare($q);
    $sql->bind_param('ss', $usuario, $senha);
    $sql->execute();
    $sql->store_result();

    if ($sql->num_rows > 0) {
        $qr = "select funcao from tb_usuario_f85 where login='" . $usuario . "'";
        $sql = $mysql->query($qr);
        $linha = $sql->fetch_object();
        //echo "teste";

        session_start();

        $_SESSION['usuario'] = $usuario;
        $_SESSION['senha'] = $senha;

        $funcao = $linha->funcao;

        switch ($funcao) {
            case 'lider':
                $_SESSION['funcao'] = 'lider';
                break;
            case 'supervisor':
                $_SESSION['funcao'] = 'supervisor';
                break;
            case 'Administrador':
                $_SESSION['funcao'] = 'Administrador';
                break;
            default:
                echo "Erro! funcao não encontrada";
                break;
        }
        header("location: usr_v2.1/");
    } else {
        echo "<script>"
        . "alert('usuário não cadastrado no sistema');"
        . "history.go(-1)"
        . "</script>";
    }
}


como eu trato o nível de acesso para que não fique separado por pastas ?

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Murilo Vanucci Pelo que vi é errado, porque na tabela o campo função deve ser a chave estrangeira, ou seja, terias que ter uma tabela chamada função que teria 2 campos o ID(este é a chave primária )e função(este só descreve o nome da função).

Isso para poder entrar na 2NF.

Com isso, terias que mudar sua instrução SQL para usar as clausulas INNER JOIN e fazer a instrução entender o relacionamento das tabelas! 

PS: até dá para fazer do jeito que está fazendo armazenando o valor da função diretamente na tabela... porém pode ter inconsistência ou redundância.. por isso sempre é sugerido "esmiuçar"  as tabelas o máximo possível! 

 

Agora sobre as pastas... bom acredito que não precisa separar por pastas.. podes colocar todos os arquivos dentro da mesma, a não ser que cada usuário tenha por exemplo um espaço para armazenar seus arquivos que não podem ser misturados.. ou que contenham um mesmo nome.. Acho que entendi isso da sua pergunta.

 

se não for isso.. por favor me explique melhor rsrs

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@dif Então eu tenho um sistema aqui na minha empresa de solicitação de usuários que eu fiz.

e nele eu fiz assim. criei uma tabela login com os campos: id, login, senha, função.
e separei os arquivos por pastas. Cada pasta tem uma permissão de acesso diferente.

eu gostaria de melhorar isso.  Eu fiz estruturado, mas quero passar para OO.

segue o código que está em produção:

<?php

//ini_set('display_errors', 1);
//ini_set('display_startup_erros', 1);
//error_reporting(E_ALL);


$usuario = $_REQUEST["usuario"];
$senha = $_REQUEST["senha"];


if (empty($usuario) or empty($senha)) {
    echo '<script>'
    . ' alert ("Preencha o campos usuário e senha corretamente.");'
    . 'history.go(-1);'
    . '</script>';
} else {

    $mysql = new mysqli('localhost', 'filial85', 'senhafilial', 'atacadao');
    $q = "select login, senha, funcao from tb_usuario_f85 where login = ? and senha = ?";
    $sql = $mysql->prepare($q);
    $sql->bind_param('ss', $usuario, $senha);
    $sql->execute();
    $sql->store_result();

    if ($sql->num_rows > 0) {
        $qr = "select funcao from tb_usuario_f85 where login='" . $usuario . "'";
        $sql = $mysql->query($qr);
        $linha = $sql->fetch_object();
        //echo "teste";

        session_start();

        $_SESSION['usuario'] = $usuario;
        $_SESSION['senha'] = $senha;

        $funcao = $linha->funcao;

        switch ($funcao) {
            case 'lider':
                $_SESSION['funcao'] = 'lider';
				header("location: usuario_v2.0/lider/");
                break;
            case 'supervisor':
                $_SESSION['funcao'] = 'supervisor';
				header("location: usuario_v2.0/supervisor/");
                break;
            case 'Administrador':
                $_SESSION['funcao'] = 'Administrador';
				header("location: usuario_v2.0/admin/");
                break;
            default:
                echo "Erro! funcao não encontrada";
                break;
        }
       
    } else {
        echo "<script>"
        . "alert('usuário não cadastrado no sistema');"
        . "history.go(-1)"
        . "</script>";
    }
}

O processo funciona assim:

1º Preenche-se um formulário com os dados do usuário solicitante.
2º Envia o formulário por e-mail para o Sup. ADM?
3º abre-se chamado para criação do usuário no sistema na central.
4º volta o status da solicitação (ficha preenchida).
 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@dif  Deixa eu ver se entendi corretamente:

Na base de dados eu preciso ter uma tabela usuario e outra tabela acesso.
e fazer um INNER JOIN entre as duas tabelas, e implementar um painel.php para cada tipo de acesso por exemplo:
painel_adm.php; painel_usr_comum.php; painel_usr_av.php

seria mais ou menos isso ?

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Murilo Vanucci Basicamente isso.

a tabela acessos vai ter os dados do nivel de acesso por exemplo:

 

campo nivel varchar: Admin, user_comum, user_avancado.. cada um com uma ID diferente de registro...

aí você compara se quem for logar, o user ser admin, você manda ele acessar o arquivo php do admin,  se é user comum para a pagina do comum.. e por ai vai.

 

podes usar o switch case e testar o ID do acesso, logico que depois que resgata dos dados de quem logou!

 

esta é a parte simples,  se quiser incrementar podes colocar por exemplo um campo de ultimoacesso  do tipo datetime, para registrar o dia e hora de acesso..  aí toda vez que logar,  você faz um update set na tabela de acesso no campo de ultimoacesso!

 

é por ai..  qualquer coisa é só chamar :D

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...