0

如果管理员未登录,我需要阻止对管理控制器中其他方法的访问。例如,如果我写 base_url/administration/show/index 我可以在不登录的情况下访问系统 Pleez help,Thx

登录控制器:

class Login extends CI_Controller{

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

    public function index(){
        // Load our view to be displayed
        // to the user
        $this->load->view('admin/authentification_view');
    }

    public function process()
    {
        // Load the model
        $this->load->model('login_model');
        // Validate the user can login
        $result = $this->login_model->validate();
        // Now we verify the result
        if(! $result){
            // If user did not validate, then show them login page again
            $this->index();
        }else{
            // If user did validate, 
            // Send them to members area
            redirect('administration/show/index');
        }        
    }

}

登录模式

class Login_model extends CI_Model{
   function __construct(){
      parent::__construct();
   }

   public function validate()
   {
        $login = $this->security->xss_clean($this->input->post('login'));
        $password = $this->security->xss_clean($this->input->post('password'));
        $this->db->where('login', $login);
        $this->db->where('password', $password);
        $query = $this->db->get('admin_details');
        if($query->num_rows == 1)
        {
            // Creare date sesiuni
            $row = $query->row();
            $data = array(
                'id' => $row->id,
                'login' => $row->login,
                'password' => $row->password,
                'validated' => true
            );
            $this->session->set_userdata($data);
            return true;
        }
        return false;
    }

}

管理控制器

class Administration extends CI_Controller
{

    function __construct()
    {
        parent::__construct();
        $this->load->model('administration_page_model');
        $this->load->model('crud');
        $this->load->helper('url');
    }  

    public function logout()
    {
        $this->session->sess_destroy();
        redirect('login');
    }

    public function show($admin_page)
    {  

            $data = array();
            $data["news"] = $this->administration_model->allNews();
            switch($admin_page)
            {
                case 'index':
                    $name = 'admin/index';
                    $this->display_lib->admin_page($data,$name);
                    break;
                case 'add_news':
                    $name = 'admin/addnews';
                    $this->display_lib->admin_page($data,$name);
                    break;
                case 'all':
                    $name = 'admin/all';
                    $this->display_lib->admin_page($data,$name);
                    break;

            }
    }
}
4

3 回答 3

0

最简单的分离是在应用程序/核心中定义以下类:

Base_Controller 扩展 CI_Controller
- 一些基本的东西,设置变量等

Admin_Controller 扩展 Base_Controller
- 集成您的逻辑/库,将用户确定为管理员
- 例如:If(!isAdmin ) -> 重定向到登录

Auth_Controller extends Base_Controller
- 例如:If(!isLoggedIn) -> 重定向到登录

Front_Controller extends Base_Controller
- 不需要 auth 或 admin,然后使用这个

于 2014-02-26T12:02:51.173 回答
0

您可以简单地放入任何管理控制器的构造函数:

function __construct()
{
    parent::__construct();
    if(!$this->session->userdata('validated')) redirect('login');
}

您还可以查看 Ion_Auth 插件(它管理身份验证、帐户等)。您只需要致电:

function __construct()
{
    parent::__construct();
    if(!$this->ion_auth->logged_in()) redirect('login');
}
于 2014-02-27T00:22:15.800 回答
-1

创建一个辅助函数 check_login() 以检查用户是否已登录,并在您需要检查 login 的每个类的构造函数中调用此辅助函数。

public function check_login(){
    $ci = & get_instance();
   if(!isset($ci->session->userdata['validated']))
   {
     //do what u want if user is not loogged in
     //for example redirect('home page url');
   }

}

现在在每个构造函数中添加这一行

check_login();

要了解有关辅助功能的更多信息,请参阅

http://ellislab.com/codeigniter/user-guide/general/helpers.html

于 2014-02-26T11:29:52.277 回答