Vous avez tapé dans le mille, mais il existe un moyen un peu plus efficace de le faire.
Étendez les contrôleurs de base, dans un sens (je crois qu'il a été décrit à l'origine par Phil Sturgeon), mais je vais résumer ici :
Voir cet article pour une rédaction très approfondie.
mais en gros :
<?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!
}
}
}
alors maintenant, si vous souhaitez restreindre l'accès, il vous suffit de :
class Secret_page extends MY_Controller {
// your logged in specific controller code
}
et le contrôleur étendu vérifiera automatiquement si l'utilisateur est connecté au constructeur.
quant à savoir comment, je définirais probablement le user_id comme valeur pour vérifier s'il est défini, ou peut-être un "groupe" d'utilisateurs - vous pouvez alors obtenir des autorisations d'utilisateur et différents niveaux d'accès dans votre système.
J'espère que cela aide un peu.
modifier
Ajoutez ceci à 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 );
}
}
Comme vous utilisez CI 2.0, vous devrez placer les MY_Controllers dans Application/CORE plutôt que dans les bibliothèques.
Mon application/noyau ressemble un peu à :
Admin_Controller.php
MY_Controller.php
Public_Controller.php