如何阻止对Admin Controller的所有方法的访问

时间:2014-02-26 11:00:51

标签: php codeigniter codeigniter-url codeigniter-form-helper

如果管理员没有登录,我需要阻止访问管理员控制器中的其他方法。例如,如果我写了base_url / administration / show / index,我可以在不登录系统的情况下访问 Pleez帮助,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;

            }
    }
}

3 个答案:

答案 0 :(得分:0)

最简单的分离是在application / core中定义以下类:

Base_Controller扩展了CI_Controller
- 一些基本的东西,设置变量等
Admin_Controller扩展了Base_Controller
- 集成您的逻辑/库,将用户确定为管理员 - 例如:If(!isAdmin) - >重定向登录

Auth_Controller扩展了Base_Controller
- 例如:If(!isLoggedIn) - >重定向登录

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

答案 1 :(得分: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');
}

答案 2 :(得分:-1)

如果用户已登录,则在cjeck中创建一个帮助函数check_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