如何获取管理员发布给所有授权用户的全部任务数据
解决方法
先理清楚核心逻辑:
- 先用传入的access token找到当前登录的用户(不管是管理员还是普通用户)
- 只拉取管理员发布的任务,并且是该用户有权限查看的(通过vehicletypes关联用户权限)
修改后的SQL
WITH current_user AS ( -- 拿到当前授权用户的ID SELECT userid FROM adminsession INNER JOIN admin ON adminsession.userid = admin.id WHERE accesstoken = :accesstoken UNION ALL SELECT userid FROM sessions INNER JOIN users ON sessions.userid = users.id WHERE accesstoken = :accesstokenusr ) SELECT packages.id, packages.amount, packages.hours, packages.vehicle_type, admin.id AS admin_publisher_id, -- 可选:显示发布任务的管理员ID admin.name AS admin_publisher_name -- 可选:显示管理员名称 FROM packages -- 关联发布任务的管理员(假设packages表用admin_id关联admin,字段不对自己改) INNER JOIN admin ON packages.admin_id = admin.id -- 关联用户能看的车辆类型 INNER JOIN vehicletypes ON packages.vehicle_type = vehicletypes.id -- 确保是当前用户有权限看的任务 INNER JOIN current_user ON vehicletypes.userid = current_user.userid
注意事项
- 用CTE把获取用户ID的逻辑抽出来,比嵌套子查询更清晰,还兼容管理员和普通用户两种身份
- 把原来旧的逗号连表改成了标准
INNER JOIN,以后维护起来更方便 - 必须关联admin表才能确保拉的是管理员发布的任务,如果你的packages表和admin的关联字段不是
admin_id,记得换成实际的字段名 - 保留了你原来的vehicletypes和用户的关联逻辑,保证只返回该用户能看到的任务
内容的提问来源于stack exchange,提问作者Santosh Kumar
相关产品推荐
相关产品推荐

