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

CodeIgniter中通过AJAX加载指定登录用户专属视图数据的方法

问题根因

模型层查询kpi_result表时未绑定当前登录用户的唯一标识做过滤,默认返回全表数据,导致不同账号访问时加载完全相同的内容。
前置校验:确认kpi_result表已设置关联用户的字段(通用命名为user_id),若未添加需先调整表结构,且新增、编辑KPI数据时必须同步写入当前操作人的用户ID,否则过滤逻辑无法生效。

修复方案

1. 确认登录态可用

先确认用户登录成功后,已将用户ID存入CodeIgniter的Session中,即登录逻辑中存在类似如下代码:

// 登录验证通过后执行,存储当前登录用户ID
$this->session->set_userdata('user_id', $verified_user['id']);

后续所有业务逻辑都从服务端Session取用户ID,禁止从前端AJAX参数传递用户ID,避免用户篡改参数越权访问他人数据。

2. 调整控制器代码

控制器中先获取当前登录用户ID,校验登录状态后将用户ID传入模型查询方法,修改后代码如下:

public function loaddatatest()
{    
    // 从服务端session获取当前登录用户ID
    $current_user_id = $this->session->userdata('user_id');
    // 未登录直接返回空数据,可根据业务需求调整为跳转登录页
    if (empty($current_user_id)) {
        echo json_encode([]);
        return;
    }
    // 传入用户ID到模型查询方法
    $data = $this->Kpi_model->loaddatatest($current_user_id); 
    echo json_encode($data ?: []);
}

3. 调整模型查询逻辑

模型方法接收用户ID参数,查询时增加WHERE条件过滤专属数据,同时修正原代码中排序关键字的拼写错误(原代码写的ASCE为无效关键字,升序正确写法为ASC),修改后代码如下:

/**
 * 查询指定用户的KPI数据
 * @param int $user_id 当前登录用户ID
 * @return array
 */
public function loaddatatest(int $user_id)
{
    // 增加用户维度过滤条件,若你的表中用户关联字段不是user_id,请替换为实际字段名
    $this->db->where('user_id', $user_id);
    $this->db->order_by('id', 'ASC');
    $query = $this->db->get('kpi_result'); 

    return $query->num_rows() > 0 ? $query->result() : [];
}

4. 配套补全其他操作的权限校验

你当前代码中包含KPI新增、删除的交互逻辑,这类写操作接口也需要同步做两层校验:

  • 新增KPI数据写入表时,必须带上当前登录用户的user_id
  • 编辑、删除KPI时,需要先根据传入的数据ID查询对应记录,校验记录关联的user_id和当前登录用户ID一致,才允许执行修改/删除操作,防止越权。
补充说明

视图层的AJAX请求逻辑无需额外修改,后端过滤逻辑生效后,接口会自动返回当前登录用户的专属数据,前端直接渲染即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:06:30