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

PHP项目优化:如何通过ID筛选指定用户/管理员实现专属审批

解决方案:通过ID筛选+权限控制实现指定用户访问

当然可以通过users表的id字段来筛选指定用户,结合type字段还能更灵活地实现权限控制,解决当前所有用户都能查看用户列表的问题。下面是具体实现思路和代码示例:

1. 先做权限拦截(核心)

在显示用户列表或执行审批操作前,先校验当前登录用户的身份。假设你用Session存储登录用户信息(PHP项目通用做法),比如$_SESSION['logged_user']包含当前用户的id和type字段。

场景1:仅允许指定ID的用户访问

如果只开放给几个特定用户(比如超级管理员),可以定义允许的ID列表,然后判断当前用户ID是否在列表内:

// 定义允许访问的用户ID集合
$allowed_ids = [1, 4, 6];
$current_user_id = $_SESSION['logged_user']['id'];

// 权限校验
if (!in_array($current_user_id, $allowed_ids)) {
    echo "你没有权限访问此页面";
    exit; // 终止后续代码执行
}

// 有权限才执行查询
$users = $conn->query("SELECT * FROM `users`");

场景2:结合用户类型+指定ID

如果需要开放给所有管理员(type=1),再额外允许几个特定普通用户,可以这样做:

$current_user = $_SESSION['logged_user'];
$allowed_extra_ids = [3, 7]; // 额外允许的普通用户ID

// 校验:管理员 或 在指定ID列表内
if ($current_user['type'] != 1 && !in_array($current_user['id'], $allowed_extra_ids)) {
    echo "权限不足,无法访问";
    exit;
}

// 执行查询
$users = $conn->query("SELECT * FROM `users`");

2. 按需筛选用户列表(可选)

如果不仅要限制访问,还要让用户只能看到指定ID的用户数据(比如自己的信息),可以在SQL查询中直接加id条件,注意一定要用预处理语句防止SQL注入:

$current_user_id = $_SESSION['logged_user']['id'];

// 预处理查询,避免注入风险
$stmt = $conn->prepare("SELECT * FROM `users` WHERE id = ?");
$stmt->bind_param("i", $current_user_id); // "i"表示参数为整数类型
$stmt->execute();
$user_data = $stmt->get_result()->fetch_assoc();

注意事项

  • 务必确保Session的安全性:开启httponly和secure属性,防止前端篡改Session数据。
  • 你的原代码中两次执行相同的SELECT * from users where type = 3查询,属于冗余操作,建议合并或按需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:30:52