2

我有一些函数可以管理控制器文件中某些控制器的访问级别。

我决定把它们带到图书馆或帮手那里。

由于它们主要是程序性的,我决定使用助手。

这是控制器文件中的原始方法(其他是 access_level_member、access_level_moderator 等)

  function access_level_admin() {

    if (!$this->session->userdata('loggedin')) {
        $this->session->set_flashdata('warning', 'Not logged in.');
        redirect('/start_page', 'refresh');
    }
    if (!$this->session->userdata('admin')) {
        $this->session->set_flashdata('warning', 'Access Denied!');
        redirect('/start_page', 'refresh');
    }  

这是一个帮手。

function access_level_admin() {
    $CI =& get_instance();
    if (!$CI->session->userdata('loggedin')) {
        $CI->session->set_flashdata('warning', 'Not logged in.');
        redirect('/start_page', 'refresh');
    }
    if (!$CI->session->userdata('admin')) {
        $CI->session->set_flashdata('warning', 'Access Denied!');
        redirect('/start_page', 'refresh');
    }  

所以我的问题是,将它放在库或助手中是更好的主意吗?可以使用 $CI =& get_instance(); 在帮手内。

有更好的想法或建议吗?

4

1 回答 1

3

我会将逻辑放在父控制器中并让您的控制器扩展它。

class Authenticated_Controller extends CI_Controller {
    public function __construct() {
        parent::__construct();
        if (!$this->session->userdata('loggedin')) {
            $this->session->set_flashdata('warning', 'Not logged in.');
            redirect('/start_page', 'refresh');
        }
}

class Admin_Controller extends Authenticated_Controller {
    public function __construct() {
        parent::__construct();
        if (!$this->session->userdata('admin')) {
            $this->session->set_flashdata('warning', 'Access Denied!');
            redirect('/start_page', 'refresh');
        }
}
于 2012-12-03T03:10:29.680 回答