sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la mejor práctica para restringir páginas específicas a usuarios registrados solo en Codeigniter?

Has dado en el clavo, pero hay una manera un poco más eficiente de hacerlo.

Extienda los controladores base, de una manera (creo que originalmente fue descrito por Phil Sturgeon), pero lo resumiré aquí:

Consulte este artículo para una redacción muy detallada.

pero en esencia:

<?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!
        }
    }
}

así que ahora, si desea restringir el acceso, simplemente:

class Secret_page extends MY_Controller {

 // your logged in specific controller code
}

y el controlador extendido comprobará automáticamente si el usuario ha iniciado sesión en el constructor.

en cuanto a cómo, probablemente configuraría user_id como el valor para verificar si está configurado, o quizás un "grupo" de usuarios; luego puede obtener permisos de usuario y diferentes niveles de acceso en su sistema.

Espero que esto ayude un poco.

editar

Agregue esto 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 );
    }
}

Como está utilizando CI 2.0, deberá colocar MY_Controllers dentro de Application/CORE en lugar de Libraries.

Mi aplicación/núcleo se parece un poco a:

Admin_Controller.php
MY_Controller.php
Public_Controller.php