过滤条件配置 (filterConfig)
Behavior: 键值对-列表

配置说明

filterConfig 专门用于 browse(列表页),控制数据的查询过滤条件。

  • 直接编写 MySQL WHERE 子句,不需要写 WHERE 关键字
  • 支持占位符({$currentUser}{$currentUserDept}{$currentDate} 等)
  • 所有占位符都会被安全转义,不要直接拼接用户输入
  • 注意性能:避免复杂的子查询,为常用过滤字段建立索引
可用占位符:
{$currentUser} - 当前用户 ID
{$currentUserDept} - 当前用户部门 ID
{$currentUserDepts} - 当前用户所有部门(逗号分隔)
{$currentUserRole} - 当前用户角色
{$currentDate} - 当前日期 (YYYY-MM-DD)
{$currentYear} - 当前年份
{$currentMonth} - 当前月份
{$currentDay} - 当前日
{$currentTime} - 当前时间 (HH:mm:ss)
配置参考:
deleted='0' AND status='active'

说明: 只显示未删除且状态为active的数据

deleted='0' AND (createdBy='{$currentUser}' OR LOCATE('{$currentUser}', share) > 0)

需求: 用户只能看到自己创建的或被分享的数据

deleted='0' AND deptID='{$currentUserDept}'

需求: 用户只能看到本部门的数据

deleted='0' AND (status='approved' OR '{$currentUserRole}' IN ('admin', 'manager'))

需求: 普通用户只能看到已审核的数据,管理员可以看到全部

deleted='0' AND YEAR(createdDate) = '{$currentYear}'

需求: 只显示本年度的数据

deleted='0' AND FIND_IN_SET(deptID, '{$currentUserDepts}')

需求: 用户可以访问所属的多个部门的数据

deleted='0'
AND status IN ('active', 'pending')
AND createdDate >= '{$currentYear}-01-01'
AND (
    createdBy='{$currentUser}'
    OR LOCATE('{$currentUser}', share) > 0
    OR '{$currentUserRole}' = 'admin'
)

需求: 复杂的多条件组合过滤

deleted='0'
AND enterpriseID IN (
    SELECT enterpriseID
    FROM enterprise_member
    WHERE userID='{$currentUser}'
)

需求: 使用子查询过滤数据

性能提示: 避免复杂的子查询,建议使用 JOIN 或索引优化

deleted='0'
AND EXISTS (
    SELECT 1
    FROM department d
    WHERE d.deptID = enterprise.deptID
    AND d.managerID='{$currentUser}'
)

需求: 使用 EXISTS 进行关联查询

注意事项:
  1. 性能考虑: 避免复杂的子查询,为常用过滤字段建立索引
  2. 安全考虑: 所有占位符都会被安全转义,不要直接拼接用户输入
  3. 测试建议: 用不同角色的账号测试过滤效果,检查是否有数据泄露风险
  4. 避免无索引查询: 不要使用 LIKE '%关键词%' 这种无法使用索引的查询
番茄钟
25:00
工作
已完成 0 个番茄
478 呼吸法
准备
-
循环:0 / 30