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
相关产品推荐
相关产品推荐

