Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la meilleure pratique pour restreindre des pages spécifiques aux utilisateurs connectés uniquement dans Codeigniter ?

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