Admin Core

仓储过滤器操作指南

在数据访问层中,过滤器(Data Filter)用于自动应用全局查询条件,如软删除过滤、多租户隔离等。本文档说明禁用和启用过滤器的常用操作模式。

概述

在数据访问层中,过滤器(Data Filter)用于自动应用全局查询条件,如软删除过滤、多租户隔离等。本文档说明禁用和启用过滤器的常用操作模式。


📋 常用过滤器类型

过滤器名称 说明
FilterNames.Delete 软删除过滤器(过滤已删除记录)
FilterNames.Tenant 多租户过滤器(隔离租户数据)

🔧 操作示例

1️⃣ 禁用删除过滤器

临时查询包含已删除的记录:

1
2
3
4
using var _ = _yourRep.DataFilter.Disable(FilterNames.Delete);

// 此处查询会包含已删除的数据
var allData = await _yourRep.GetListAsync();

2️⃣ 仅启用删除过滤器(禁用其他所有)

先禁用全部过滤器,再单独启用删除过滤器:

1
2
3
4
5
using var _ = _yourRep.DataFilter.DisableAll();
using var __ = _yourRep.DataFilter.Enable(FilterNames.Delete);

// 仅应用删除过滤,其他过滤器(如租户)不生效
var data = await _yourRep.GetListAsync();

3️⃣ 禁用租户过滤器

临时跨租户查询数据:

1
2
3
4
using var _ = _yourRep.DataFilter.Disable(FilterNames.Tenant);

// 此处查询会包含所有租户的数据
var allTenantData = await _yourRep.GetListAsync();

4️⃣ 禁用所有过滤器

完全无过滤的数据访问:

1
2
3
4
using var _ = _yourRep.DataFilter.DisableAll();

// 原始数据查询,无任何自动过滤
var rawData = await _yourRep.GetListAsync();

⚠️ 重要注意事项

🔒 作用域管理

  • using 语句确保过滤器状态在作用域结束时自动恢复
  • 避免手动管理过滤器状态,防止遗漏恢复

🔄 嵌套使用

  • 支持多个过滤器同时操作
  • 每个 using 变量需独立命名(如 _, __, ___

🚨 安全风险

  • 禁用 Tenant 过滤器可能导致数据泄露
  • 建议在受控的管理场景中使用

🔗 组合使用示例

1
2
3
4
5
6
7
8
// 同时禁用删除和租户过滤,保留其他过滤器
using var disableDelete = _yourRep.DataFilter.Disable(FilterNames.Delete);
using var disableTenant = _yourRep.DataFilter.Disable(FilterNames.Tenant);

// 查询包含:已删除记录 + 所有租户数据
var result = await _yourRep.GetListAsync();

// 作用域结束:两个过滤器自动恢复

#中台/常见问题