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

如何解析字符串格式的用户ID列表,校验用户是否拥有内容查看权限?

针对分隔符格式用户ID的校验与权限控制方案

一、数据库层面的查询校验(直接过滤符合权限的任务)

因为字段存储格式为-ID1-ID2-ID3-,可以利用SQL的LIKE语句精准匹配用户ID,避免部分匹配的问题(比如ID=1不会误匹配ID=10)。修改你的Laravel查询代码如下:

$tasks = Tasks::with('uprcomp','street','houses', 'otvets', 'created_user')
    ->where('status','0')
    ->where(function($query) use ($user_id) {
        // 任务创建者直接有权限
        $query->where('user_id', $user_id)
            // 负责人字段(若为单个ID则直接匹配,若为分隔符格式可参照下方修改)
            ->orWhere('f8820', $user_id)
            // 观察者字段f8830:匹配包含-$user_id-的字符串
            ->orWhere('f8830', 'LIKE', "%-$user_id-%")
            // 协同执行者字段f8840:同上
            ->orWhere('f8840', 'LIKE', "%-$user_id-%")
            // 观察者字段f11580:同上
            ->orWhere('f11580', 'LIKE', "%-$user_id-%");
    })
    ->orderBy('id', 'desc')
    ->paginate(25);

注意事项:

  • 如果f8820(负责人)字段也采用分隔符存储多个ID,同样需要改成LIKE匹配方式;
  • 使用%-$user_id-%而非%$user_id%,是为了避免匹配到类似123中的23这种部分ID的情况,保证精准匹配。

二、代码层面的权限校验(单个任务的权限验证)

如果需要对单个任务实例校验用户是否有权限查看,可以通过以下步骤实现:

  1. 拆分字段字符串为ID数组,过滤空元素(因为前后的-会导致拆分后出现空字符串)
  2. 检查用户ID是否在目标数组中

示例代码:

// 假设$task是Tasks模型实例
$userId = auth()->id(); // 当前登录用户ID
$hasPermission = false;

// 检查是否是创建者或负责人
if ($task->user_id == $userId || $task->f8820 == $userId) {
    $hasPermission = true;
}

// 检查是否在观察者列表(f8830)
$observers = array_filter(explode('-', $task->f8830));
if (in_array($userId, $observers)) {
    $hasPermission = true;
}

// 检查是否在协同执行者列表(f8840)
$coExecutors = array_filter(explode('-', $task->f8840));
if (in_array($userId, $coExecutors)) {
    $hasPermission = true;
}

// 检查是否在另一个观察者列表(f11580)
$otherObservers = array_filter(explode('-', $task->f11580));
if (in_array($userId, $otherObservers)) {
    $hasPermission = true;
}

// 根据权限状态处理逻辑
if (!$hasPermission) {
    abort(403, '无查看权限');
}

三、优化建议

这种用分隔符存储多个ID的方式,在数据量较大时会影响查询性能,且不利于维护。建议优化数据库结构:

  • 建立关联表(如task_observers、task_co_executors),采用多对多关联的方式存储任务与用户的关系;
  • 利用Laravel的Eloquent关联模型,更便捷地实现权限查询与管理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:55:56