【问题标题】:How can i prevent the loading of index function with __construct in CodeIgniter?如何防止在 CodeIgniter 中使用 __construct 加载索引函数?
【发布时间】:2010-08-29 01:42:06
【问题描述】:

我正在使用 CodeIgniter 为我的应用程序构建管理区域,我在名为 MY_Admin_Base 的库中创建了一个基本管理控制器,它扩展了 CI 控制器。如果管理员有权访问该方法,我会在数据库中检查。

class MY_Admin_Base extends Controller {

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


        //check if the admin has premission to the page
        $this->load->model('admin_permissions_model');
        $query = $this->admin_permissions_model->get_admin_permission(
            array(
            'admin_id'=>$this->session->userdata('admin_id'),
            'page_id'=>$pages_cat_id)
            );

            if(!$query)
                $this->view->load('admin/restricted_area');
    }
}

主类扩展了 MY_Admin_Base,并具有索引方法,类似于:

class Main extends MY_Admin_Base {

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

    function index() 
    {       
        $this->view->load('admin/main');
    }
}

问题是如果管理员没有访问权限,这两个视图都会被加载...受限视图和主视图。

有人有什么建议吗?

【问题讨论】:

    标签: php oop codeigniter


    【解决方案1】:

    在 MY_Admin_Base 类中创建一个变量来存储用户是否是管理员:

    class MY_Admin_Base extends Controller {
        public $is_admin = true;
    

    然后改变

    if(!$query)
        $this->view->load('admin/restricted_area');
    

    if(!$query) {
        $this->view->load('admin/restricted_area');
        $this->is_admin = false;
    }
    

    然后在您的索引函数中,将代码更改为。

    function index()  {
        if(!$this->is_admin) return;
    
        $this->view->load('admin/main');
    }
    

    【讨论】:

    • 但我需要对每种方法进行检查?
    • 是的,您需要检查每种方法。另一种方法可能是使用 die();在加载受限区域视图后终止代码执行的函数,尽管取决于您的环境,这可能不一定是一个好主意。另一种选择是在每个控制器中创建一个包含“受保护”方法名称的数组,然后只需在构造函数内部使用 in_array 来确定是否允许用户访问该方法,如果没有,则调用 die();函数或使用其他更安全的方法来关闭应用程序的执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2017-06-13
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多