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

基于管理员角色的SQL条件查询问题:Superadmin如何全量拉取数据

解决按管理员角色过滤数据的SQL问题

问题分析

你当前的SQL思路方向是对的,但存在两个明显问题:

  1. 直接把${req.body.superadmin}拼进SQL字符串有SQL注入风险,绝对不能这么写
  2. 用LIKE '%%'匹配全部数据的写法可以简化,CASE表达式的逻辑也可以更严谨

正确实现方案

方案一:优化CASE表达式写法

当用户是Superadmin时,让FoldersID等于自身(永远为真,即返回全量数据),否则匹配指定ID:

// 必须用参数化查询,示例以通用参数化格式为例
let sql = `SELECT * FROM DossierCompletMobile 
WHERE FoldersID = CASE WHEN ? = 1 THEN FoldersID ELSE ? END`;
// 执行SQL时传入参数:[req.body.superadmin, 'AD451340-E774-4F6C-9398-ADC8E496A792']

方案二:用逻辑OR实现,可读性更强

这种写法逻辑更直观,更容易维护:

let sql = `SELECT * FROM DossierCompletMobile 
WHERE ? = 1 OR FoldersID = ?`;
// 执行SQL时传入参数:[req.body.superadmin, 'AD451340-E774-4F6C-9398-ADC8E496A792']

重要提醒

  • 无论用哪种方案,都要使用参数化查询替代字符串拼接,避免SQL注入攻击
  • 如果非Superadmin用户的对应FolderID是动态值(不是固定的AD451340-E774-4F6C-9398-ADC8E496A792),只需要把第二个参数换成用户对应的角色ID即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:45:33