过滤条件配置 (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 进行关联查询
注意事项:
- 性能考虑: 避免复杂的子查询,为常用过滤字段建立索引
- 安全考虑: 所有占位符都会被安全转义,不要直接拼接用户输入
- 测试建议: 用不同角色的账号测试过滤效果,检查是否有数据泄露风险
- 避免无索引查询: 不要使用
LIKE '%关键词%'这种无法使用索引的查询