Hai colpito nel segno, ma c'è un modo leggermente più efficiente per farlo.
Estendi i controller di base, in un modo (credo originariamente delineato da Phil Sturgeon) ma riassumerò qui:
Vedi questo articolo per una scrittura molto approfondita.
ma in sostanza:
<?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!
}
}
}
quindi ora se vuoi limitare l'accesso, semplicemente:
class Secret_page extends MY_Controller {
// your logged in specific controller code
}
e il controller esteso verificherà automaticamente se l'utente è loggato nel costruttore.
per quanto riguarda come, probabilmente imposterei user_id come valore per verificare se è impostato, o forse un "gruppo" di utenti, quindi puoi ottenere autorizzazioni utente e vari livelli di accesso nel tuo sistema.
spero che questo aiuti un po'.
modifica
Aggiungilo a 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 );
}
}
Poiché stai utilizzando CI 2.0, dovrai posizionare i MY_Controllers all'interno di Application/CORE anziché nelle Librerie.
La mia applicazione/core assomiglia un po' a:
Admin_Controller.php
MY_Controller.php
Public_Controller.php