Ударили сте нокътя в главата, но има малко по-ефективен начин да го направите.
Разширете базовите контролери по един начин (вярвам, че първоначално е описано от Фил Стърджън), но ще обобщя тук:
Вижте тази статия за много задълбочено писане.
но по същество:
<?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!
}
}
}
така че сега, ако искате да ограничите достъпа, просто:
class Secret_page extends MY_Controller {
// your logged in specific controller code
}
и разширеният контролер автоматично ще провери дали потребителят е влязъл в конструктора.
що се отнася до това как, вероятно бих задал user_id като стойност, за да проверя дали е зададен, или може би потребителска "група" - тогава можете да получите потребителски разрешения и различни нива на достъп във вашата система.
надявам се това да помогне малко.
редактиране
Добавете това към 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 );
}
}
Тъй като използвате CI 2.0, ще трябва да поставите MY_Controllers в Application/CORE, а не в библиотеки.
Моето приложение/ядро изглежда малко като:
Admin_Controller.php
MY_Controller.php
Public_Controller.php