检查整个站点部分的auth(多个控制器)

时间:2011-06-28 22:32:20

标签: codeigniter

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

为了检查用户是否已登录并允许其在那里,我只是将auth->is_logged_in()方法放在每个控制器的构造函数中。

是否值得创建一个具有此检查功能的基本控制器,然后针对所有成员区域控制器进行扩展? (最佳做法?)

2 个答案:

答案 0 :(得分:2)

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

我建议您将其称为Secured_Controller(或类似的东西),使安全控制器的构造函数采用(可选)访问级别(因此您可以为刚刚登录的用户提供一些,有些用于管理员等)。 ..)

同时使其不需要访问级别(但提供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

    }
}

答案 1 :(得分:1)

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

希望这可以帮到你,让我们知道是否有什么...谢谢!!