LINUX.ORG.RU

Проверка сессии Codeigniter

 ,


0

1

Здравствуйте!

В контроллере находится следующая функция:

function index()
{
        maintain_ssl();

        // If user is not signed in or dont have access to any administration modules
        if (! $this->authentication->is_signed_in() || 
            ! $this->account_access_model->is_admin($this->session->userdata('account_id')))
        {
            show_404();
        }

        // Set account related variables
        $data['my_account'] = $this->account_model->get_by_id($this->session->userdata('account_id'));
        $data['my_account_details'] = $this->account_details_model->get_by_account_id($this->session->userdata('account_id'));
        $data['my_account_access'] = $this->account_access_model->get_by_account_id($this->session->userdata('account_id'));

        // Set variables for this controller
        $data['accounts'] = $this->account_model->get_accounts();
        
        // Load view
        $data['title'] = lang('admin_accounts_page_name');
        $data['page'] = 'accounts';
        $this->load->view('admin/template', $data);
}

Она проверяет, имеет ли посетитель права доступа к панели администратора, затем подгружает необходимые переменные и выдаёт представление.

Так вот, проверка прав доступа должна быть на каждой странице панели администратора. Куда вынести блок кода, отвечающий за неё, чтобы не приходилось повторять одно и то же в каждом методе?

Предполагаю, что можно сделать контроллер, который делает extend стандартного. Как это сделать, я знаю. Только вот что написать внутри, чтобы в начале выполнения каждого метода выполнялся определённый блок кода?

В кохане у абстрактного контроллера есть метод before, который вызывается перед каждым экшеном. Соответственно, все контроллеры админки должны наследоваться от этого, а не от базового.

Так как кохана - это форк CI, полагаю, что у него это тоже должно быть

boombick ★★★★★ ()
Ответ на: комментарий от boombick

Спасибо за ответ.

Всё оказалось весьма тривиально. Но на всякий случай напишу, вдруг кому пригодится.

1. Расширение стандартного контроллера ( ./application/core/MY_Controller.php )

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }
}

class Admin_Controller extends MY_Controller
{
    function __construct()
    {
        parent::__construct();
        
        maintain_ssl();

        // If user is not signed in or dont have access to any administration modules
        if (! $this->authentication->is_signed_in() || ! $this->account_access_model->is_admin($this->session->userdata('account_id')))
        {
            show_404();
        }
    }
}

2. Контроллер панели администратора ( ./application/modules/admin/controllers/dashboard.php )

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

class Dashboard extends Admin_Controller
{

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        // Set account related variables and load view
    }

}

papasha ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.