Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a melhor prática para restringir páginas específicas a usuários logados apenas no Codeigniter?


Você acertou em cheio, mas há uma maneira um pouco mais eficiente de fazer isso.

Estenda os controladores básicos, de uma maneira (acredito originalmente delineado por Phil Sturgeon), mas vou resumir aqui:

Consulte este artigo para uma escrita muito aprofundada.

mas em essência:
<?php
class MY_Controller extends Controller
{
    function __construct()
    {
        parent::Controller();
        if (! $this->session->userdata('first_name'))
        {
            redirect('login'); // the user is not logged in, redirect them!
        }
    }
}

então agora se você quiser restringir o acesso, simplesmente:
class Secret_page extends MY_Controller {

 // your logged in specific controller code
}

e o controlador estendido verificará automaticamente se o usuário está logado no construtor.

quanto a como, eu provavelmente definiria o user_id como o valor para verificar se está definido, ou talvez um "grupo" de usuário - então você pode obter permissões de usuário e níveis variados de acesso em seu sistema.

Espero que isto ajude um pouco.

editar

Adicione isso ao application/config.php
/*
| -------------------------------------------------------------------
|  Native Auto-load
| -------------------------------------------------------------------
| 
| Nothing to do with cnfig/autoload.php, this allows PHP autoload to work
| for base controllers and some third-party libraries.
|
*/
function __autoload($class)
{
    if(strpos($class, 'CI_') !== 0)
    {
        @include_once( APPPATH . 'core/'. $class . EXT );
    }
}

Como você está usando o CI 2.0, você precisará colocar os MY_Controllers dentro de Application/CORE ao invés de Libraries.

Meu aplicativo/núcleo se parece um pouco com:
Admin_Controller.php
MY_Controller.php
Public_Controller.php