使用Codeigniter进行管理员访问

时间:2017-01-13 20:59:34

标签: php codeigniter

我已经为我的管理页面创建了一个登录表单,但它确实有效,但是现在每个登录的人都可以访问这些页面。

我的用户也属于用户组,数据库中的用户表有一个group_id列。管理员组的ID为1.

我想要做的是,如果属于管理员组登录的人可以访问管理页面,但如果用户属于不同的组并尝试登录,则可以重定向到主页或任何地方。

我要做的是向管理页面控制器添加类似的代码

class Dashboard extends MY_Controller {
public function __construct() {
    parent::__construct();

    // Access control
    if(!$this->session->userdata('logged_in')) {
        redirect('admin/login');
    }
}
}

我的模特

class Authenticate_model extends CI_Model {
    public function login_user($username, $password){
        //Secure password
        $enc_password = md5($password);

        //Validate
        $this->db->where('username',$username);
        $this->db->where('password',$enc_password);

        $result = $this->db->get('users');

        if($result->num_rows() == 1){
            return $result->row();
        } else {
            return false;
        }
    }
} 

2 个答案:

答案 0 :(得分:0)

您可以自己动手,提供验证并设置$ SESSION变量以检索用户是否已登录。但这样做太多了,而且容易出错。  我建议你使用这个受欢迎的库:https://github.com/benedmunds/CodeIgniter-Ion-Auth。这很容易设置,你只需要复制一些文件就可以了。

答案 1 :(得分:0)

如果你真的想要自己做(那就是问题)那么你需要在SESSION中存储两个变量--loged_in和is_admin。

我会推荐两个带有函数的创建库:

function is_logged_in($admin = FALSE){
   $is_logged = $this->session->userdata('logged_in');
   if($admin){
       $is_logged = $this->session->userdata('is_admin')
   }
   return $is_logged;
}

这假设您在SESSION中存储了两个布尔“logged_in”和“is_admin”。(如果用户有group_id = 1,那么您将在is_admin中存储TRUE)

然后,您可以仅保护您的网站会员页面

if(!$this->your_authenticatation_library->is_logged_in()){redirect('notMembersControler')}

和管理页面:

if(!$this->your_authenticatation_library->is_logged_in(TRUE)){redirect('notMembersControler')}

这是基本的想法,你需要根据你的目标来解决。希望这有帮助!