Autenticação de usuário com controle de acesso

É muito comum precisarmos criar aplicações com áreas de acesso restrito, e nessas áreas limitarmos os acessos, de forma a cada usuário ter acesso a um determinado grupo de telas e recursos.

Solucionar esse problema não é algo complicado, com poucas linhas de código é possível criar um sistema de autenticação com controle de acesso, e nas próximas linhas vamos criar uma library para fazer essa autenticação.

Crie um arquivo chamado “Auth.php” dentro do diretório “application/libraries” do seu projeto e coloque o código a seguir nele:

A classe acima possui um único método, chamado CheckAuth, que fará as seguintes verificações:

  • Se o método passado como parâmetro existe na tabela permissões
  • Se o método passado é público (0) ou privado (1)
  • Se o usuário está logado
  • Se o usuário tem permissão para acessar o recurso (método)

Veja a seguir o código SQL para criação das tabelas no banco de dados.

No repositório no GitHub (link no final do tutorial) tem um arquivo chamado “database.sql”, com essa estrutura, além do código da library Auth.

Como utilizar a library criada

Veja a seguir os processos para utilização da library.

Carregamento

Para utilizar a library criada acima você deve carregá-la através do arquivo “application/config/autoload.php” adicionando o seu nome na chave correspondente:

$autoload['libraries'] = array('Auth');

Dessa forma, ela estará disponível para uso em qualquer controller e método da aplicação.

Chamada ao método de autenticação CheckAuth

Para chamar o método você utilizará a seguinte linha:

$this->Auth->CheckAuth('nome_classe','nome_metodo');

Como parâmetros você deverá passar o nome da classe e do método que o usuário está tentando acessar. O CodeIgniter possui 2 métodos capazes de retornar essa informação, são eles:

//Retorna o nome da classe

$this->router->fetch_class();

//Retorna o nome do metodo

$this->router->fetch_method();

Sendo assim, você poderia chamar CheckAuth dessa forma:

$this->Auth->CheckAuth($this->router->fetch_class(), $this->router->fetch_method());

Essa chamada ao método CheckAuth pode ser realizada em cada um dos métodos, ou então no método __construct() de cada controller da aplicação.

Processo de login

O processo de login da sua aplicação vai armazenar informações do usuário na sessão, e essas informações são recuperadas pela library Auth que foi criada. Verifica no código da library se as informações da sessão que são utilizadas nelas correspondem às informações que você usa na sua aplicação, se forem diferentes, atualize o código da library para que se comporte corretamente.

A parte do código a ser verificada é:

$nome = $this->CI->session->userdata('nome');
$logged_in = $this->CI->session->userdata('logged');
$data = $this->CI->session->userdata('data');
$email = $this->CI->session->userdata('email');
$id_usuario =  $this->CI->session->userdata('id_usuario');
Rotas e views das telas de login e informação de usuário sem permissão

Não se esqueça de informar no arquivo “application/config/routes.php” as rotas corretas para a exibição das telas de login e usuário sem permissão de acesso, além de criar as respectivas views em “application/views”.

Informações importantes

Como a library adiciona automaticamente as classes e métodos na tabela “metodos”, caso você altere o nome de algum método no controller, será necessário atualizar também as informações na tabela.

Você pode criar uma interface dentro da sua aplicação para cadastrar e editar manualmente cada um dos métodos adicionados na tabela “metodos”.

Tem dúvidas sobre o processo?

Comente com sua dúvida que responderemos o mais breve possível. Ou então envie-nos uma mensagem com a dúvida através da fanpage (https://www.facebook.com/universidadecodeigniter/).

button-codigo-fonte