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

CodeIgniter登录后仅获取当前用户关联数据的问题求助

我明白你的问题了——现在不管哪个用户登录,都会拉取所有reviewers的数据,而你需要每个用户只能看到和自己关联的条目。咱们一步步来修改代码解决这个问题:

1. 修改Model方法,添加用户ID过滤

原来的Model方法没有任何过滤逻辑,所以会返回全量数据。我们需要让它接收当前登录用户的ID,只查询该用户对应的reviewers条目:

public function showAllReviewers($user_id){
    // 过滤出当前用户对应的reviewers数据,明确指定表名避免字段歧义
    $this->db->where('reviewers.user_id', $user_id);
    $this->db->join('teachers', 'teachers.id = reviewers.user_id');
    $query = $this->db->get('reviewers');
    
    return $query->num_rows() > 0 ? $query->result() : false;
}

2. 修改Controller方法,传递当前登录用户ID

你的登录Controller已经把用户ID存在Session的user_id字段里了,我们需要先从Session获取这个ID,再传给Model,同时增加登录检查确保接口安全:

public function showAllReviewers() {
    // 检查用户是否已登录,未登录则跳转或返回空数据
    if(!$this->session->userdata('logged_in')){
        // 如果是AJAX请求,返回空数组避免前端报错
        echo json_encode([]);
        return;
        // 或者跳转到登录页:redirect('teachers/login');
    }
    
    // 获取当前登录用户的ID
    $user_id = $this->session->userdata('user_id');
    // 调用Model时传入用户ID做过滤
    $result = $this->reviewer_model->showAllReviewers($user_id);
    
    // 确保即使Model返回false,前端也能拿到合法的JSON数组
    echo json_encode($result ?? []);
}

3. 前端无需修改

你的AJAX/View代码不需要调整,因为前端只是负责渲染后端返回的数据,只要后端返回的是当前用户的专属数据,前端自然会显示正确内容。

关键验证点

  • 确认你的reviewers表确实存在user_id字段,并且这个字段的值和teachers表的id一一对应,这是整个过滤逻辑的核心。
  • 如果后续需要更复杂的权限(比如一个用户能查看多个产品),可以新增user_products关联表,再修改Model的查询条件为关联表过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:52:28