You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于用户角色实现CodeIgniter登录后跳转至管理员/用户页面

解决方案:根据用户角色实现登录后跳转

我看了你的代码,发现几个小问题导致角色判断和跳转无法正常工作,下面是修正后的完整代码和关键点说明:

首先修正模型代码

原模型方法缺少public访问修饰符,而且可以优化查询逻辑(用row()代替result()更适合单用户记录的场景):

public function get_user($email, $pwd) {
    $this->db->where('email', $email);
    $this->db->where('password', md5($pwd));
    // 用row()返回单个用户对象,比result()的数组形式更直观
    $query = $this->db->get('ea_users');
    return $query->row();
}

然后修正控制器代码

主要修复角色判断的语法错误,同时把用户角色存入会话(方便后续其他页面权限判断):

public function index() {
    // 获取表单输入
    $email = $this->input->post("email");
    $password = $this->input->post("password");
    
    // 表单验证
    $this->form_validation->set_rules("email", "Email-ID", "trim|required");
    $this->form_validation->set_rules("password", "Password", "trim|required");
    
    if ($this->form_validation->run() == FALSE) {
        // 验证失败,返回登录页
        $this->load->view('login_view');
    } else {
        // 验证用户凭证
        $user = $this->model_user->get_user($email, $password);
        if ($user) { // 直接判断对象是否存在,比count数组更简洁
            // 设置会话,新增角色字段方便后续权限校验
            $sess_data = array(
                'login' => TRUE, 
                'uname' => $user->first_name,
                'ulname' => $user->last_name,
                'uemail' => $user->email, 
                'uphone' => $user->phone_number, 
                'uaddress' => $user->address, 
                'ucity' => $user->city, 
                'uin' => $user->injury, 
                'uid' => $user->id,
                'urole' => $user->id_roles // 新增角色存储,后续页面可直接调用
            );
            $this->session->set_userdata($sess_data);
            
            // 根据角色跳转:3=普通用户→预约页,2=管理员→管理页
            if($user->id_roles == 3) {
                redirect('appoinments/index');
            } else {
                redirect('admin/index');
            }
        } else {
            $this->session->set_flashdata('msg', '<div class="alert alert-danger text-center">Wrong Email-ID or Password!</div>');
            redirect('login/index');
        }
    }
}

关键修改点说明

  1. 模型返回值优化:把result()改成row(),因为我们查询的是单个用户,返回对象比数组更方便直接访问属性,也避免了数组索引的麻烦
  2. 角色判断语法修复:原代码$uresult->['id_roles']是语法错误,现在通过$user->id_roles直接访问对象属性
  3. 会话新增角色字段:把用户角色存入会话,后续在管理员页面或其他页面可以直接通过$this->session->userdata('urole')判断用户权限,不用重复查询数据库
  4. 存在性判断优化:用if ($user)代替count($uresult) > 0,更简洁直观,因为row()如果没找到记录会返回null

这样修改后,登录时就能根据用户的id_roles值正确跳转到对应的页面了。

内容的提问来源于stack exchange,提问作者Lainey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:00:55