Проверка подлинности для всего раздела сайта (несколько контроллеров) - PullRequest
2 голосов
/ 29 июня 2011

В моей защищенной зоне входа есть много подразделов и контроллеров.

Для проверки того, что пользователь вошел в систему и ему разрешено находиться там, я просто собирался поместить свой метод auth->is_logged_in() в конструктор каждого из этих контроллеров.

Стоит ли создавать базовый контроллер с этой проверкой, а затем расширять ее для всех контроллеров области участников? (лучшая практика?)

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Я бы сказал, да на базовом контроллере. Вы также можете добавить дополнительные проверки.

Я предлагаю вам назвать его Secured_Controller (или что-то в этом роде), заставить конструктор защищенного контроллера принять (необязательный) уровень доступа (чтобы вы могли иметь некоторые только для зарегистрированных пользователей, а некоторые для администраторов и т. Д.). ..)

Также сделайте так, чтобы он не принимал уровень доступа (но предоставьте метод gaurd, чтобы вы могли использовать определенные методы gaurd в контроллере и позволить другим работать бесплатно.

Пример:

Admin Controller

class Admin_Controller extends Secure_Controller
{
    public __construct()
    {
        parent::__construct(ACCESS_LEVEL_ADMIN);
    }
}

Частично защищенный контроллер

class Partial_Controller extends Secure_Controller
{
    public __construct()
    {
        parent::__construct();
    }

    public function Index() 
    {
        $this->GaurdPermissions(ACCESS_LEVEL_ADMIN); // Would redirect if not enough permissions

    }
}
1 голос
/ 29 июня 2011

Я создал библиотеку Auth для этого

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Auth
{
    private $CI;
    private $redirect;

    function __construct()
    {
        $this->CI =& get_instance();
        $this->redirect = 'home/login';
    }

    function _redirect($redirect, $rurl)
    {
        redirect(($rurl == '') ? $this->redirect : $rurl);
    }

    function check_login($redirect = FALSE, $rurl = '')
    {
        if($this->CI->session->userdata('logged') == TRUE) {
            return TRUE;
        }
        $this->_redirect($redirect, $rurl);
    }

    function check_admin($redirect = FALSE, $rurl = '')
    {
        if($this->CI->session->userdata('user_type') == 'administrator') {
            return TRUE;
        }
        $this->_redirect($redirect, $rurl);
    }
}
?>

А это пользовательский контроллер

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Users extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        $this->load->library('auth');
        // second param is optional // will redirect if not admin //
        $this->auth->check_admin(TRUE, 'admin/login');
    }

Надеюсь, это поможет вам, дайте нам знать, если что-нибудь ... Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...