Codeigniter 正在检查整个站点部分的身份验证(多个控制器)

Codeigniter 正在检查整个站点部分的身份验证(多个控制器),codeigniter,Codeigniter,“我的登录受保护的成员”区域有许多子部分和控制器 为了检查用户是否已登录并允许登录,我只是将我的auth->is\u logged\u in()方法放在每个控制器的构造函数中 是否值得创建一个包含此签入的基本控制器,然后为所有成员区域控制器扩展此签入?(最佳实践?我会在基本控制器上说是。您也可以添加其他支票 我建议您将其称为Secured_Controller(或类似的东西),使Secured Controller的构造函数具有(可选)访问级别(因此您可以为刚登录的用户提供一些访问级别,为管理员

“我的登录受保护的成员”区域有许多子部分和控制器

为了检查用户是否已登录并允许登录,我只是将我的
auth->is\u logged\u in()
方法放在每个控制器的构造函数中


是否值得创建一个包含此签入的基本控制器,然后为所有成员区域控制器扩展此签入?(最佳实践?

我会在基本控制器上说是。您也可以添加其他支票

我建议您将其称为Secured_Controller(或类似的东西),使Secured Controller的构造函数具有(可选)访问级别(因此您可以为刚登录的用户提供一些访问级别,为管理员提供一些访问级别,等等)

也要使其不具有访问级别(但提供一个gaurd方法,以便您可以在控制器中使用gaurd特定方法,并让其他方法自由运行)

例如:

管理员控制器

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

    }
}
部分安全控制器

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

    }
}

我为此创建了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');
    }