首页 > 其他分享 >Abp.VNext-数据过滤

Abp.VNext-数据过滤

时间:2024-11-19 17:40:42浏览次数:1  
标签:VNext 黑名单 查询 Abp 过滤 typeof expression public

如何实现软删除数据查询过滤

实体类继承ISoftDelete接口后,查询获取到的返回结果将不包含已删除的数据。

如何关闭软删除数据过滤

全局方式关闭软删除数据过滤

EntityFrameworkCoreModule模块类中使用。

[DependsOn(typeof(AbpEntityFrameworkCoreMySQLModule))]
public class EntityFrameworkCoreModule : AbpModule
{
     public override void ConfigureServices(ServiceConfigurationContext context)
     {
        Configure<AbpDataFilterOptions>(options => {
            options.DefaultStates[typeof(ISoftDelete)] = new DataFilterState(isEnabled:false);
        });
     }
}
局部方式关闭软删除数据过滤

应用层或仓储层使用。

using (DataFilter.Disable<ISoftDelete>())
{
    //查询
}

如何实现自定义数据查询过滤

案例场景:黑名单查询过滤

  1. 定义过滤器接口
 /// <summary>
 /// 黑名单过滤器
 /// </summary>
 public interface IBlackNameFilter
 {
     public string Name { get; set; }
 }
  1. 实体类实现该过滤器接口
public class News:IBlackNameFilter
{

}
  1. 重写DbContext中的 ShouldFilterEntity 和 CreateFilterExpression方法
/// <summary>
/// 控制黑名单自定义过滤器是否启用
/// </summary>
protected bool isActiveBlackNameFilterEnabled => DataFilter?.IsEnabled<IBlackNameFilter>() ?? false;

protected override bool ShouldFilterEntity<TEntity>(IMutableEntityType entityType)
{
  if (typeof(IBlackNameFilter).IsAssignableFrom(typeof(TEntity)))
  {
      return true;
  }

  return base.ShouldFilterEntity<TEntity>(entityType);
}

/// <summary>
/// 定义黑名单自定义过滤器过滤规则
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <returns></returns>
protected override Expression<Func<TEntity, bool>> CreateFilterExpression<TEntity>()
{
    var expression = base.CreateFilterExpression<TEntity>();

    if (typeof(IBlackNameFilter).IsAssignableFrom(typeof(TEntity)))
    {
        List<string> filterNames = new List<string> { "傻逼", "贱人" };

        //通过实体中的Name字段判断是否是黑名单
        Expression<Func<TEntity, bool>> isActiveFilter = e => !isActiveBlackNameFilterEnabled || !filterNames.Contains(EF.Property<string>(e, "Name"));

        expression = expression == null ? isActiveFilter : CombineExpressions(expression, isActiveFilter);
    }

    return expression;
}

如何关闭自定义数据过滤

方式一:此方式执行方法结束后会自动释放变量空间

using var blackNameFilter = DataFilter.Disable<IBlackNameFilter>();
//查询代码

方式二:只在{}内有效

using (DataFilter.Disable<IBlackNameFilter>())
{
    //查询代码
}

标签:VNext,黑名单,查询,Abp,过滤,typeof,expression,public
From: https://www.cnblogs.com/mingcore/p/18555317

相关文章

  • Abp.VNext-统一配置UTC时区时间
    PreConfigureServices方法重载并添加如下代码[DependsOn(typeof(AbpAutofacModule),typeof(AbpAspNetCoreMvcModule),)]publicclassApiHostModule:AbpModule{publicoverridevoidPreConfigureServices(ServiceConfigurationContextcontext)......
  • 多表关联时过滤条件放在On和Where后面的区别
    演示数据库:Mysql创建表内连接放在On后面SELECT*FROMtb_singert1INNERJOINtb_songt2ONt1.id=t2.singer_idandt2.`name`='夜曲'WHEREt1.`name`='周杰伦';放在Where后面SELECT*FROMtb_singert1INNERJOINtb_songt2ONt1.id=t2.singer_idWHERE......
  • 极致高效的数据处理:位图、布隆过滤器与哈希切分的奇妙之旅
    文章目录前言......
  • Java Web 过滤器和拦截器.
    概念过滤器即Servlet过滤器,参见Servlet过滤器入门示例。拦截器(Interceptor)通常是由特定的框架提供的,不是JavaEE标准的一部分。Spring提供了多种类型的拦截器,如方法拦截器(MethodInterceptor)和控制器拦截器(HandlerInterceptor)。方法拦截器可以用于AOP(面向切面编程),而控......
  • 列表数据隔离--采购申请单只能看当前用户的单据信息 过滤,PrepareFilterParameter 2
    region<<版本注释>>/*===================================================类名称:PUR_Requisition_listFilter类描述:列表数据隔离--采购申请单只能看当前用户的单据信息过滤,PrepareFilterParameter创建人:luohong创建时间:2024/11/1516:18:04电子邮箱:it_lu......
  • 201_springboot基于协同过滤的就业推荐系统
    目录系统展示开发背景代码实现项目案例 获取源码博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web......
  • SpringBoot中监听器、过滤器、拦截器和AOP详解
    SpringBoot中监听器、过滤器、拦截器和AOP详解在构建SpringBoot应用程序时,监听器(Listener)、过滤器(Filter)、拦截器(Interceptor)和面向切面编程(AOP)是四种常用的机制,它们各自有不同的用途和执行时机。本文将详细介绍这四种技术的执行时机和区别,并附上示例代码帮助理解。1.......
  • 帝国CMS过滤内容里面HTML字符简单的方法代码
    自定义函数在 /e/class/userfun.php 文件中添加以下代码:functionDELHTML($string){$string=preg_replace("'<script[^>]*?>.*?</script>'si","",$string);//去掉javascript$string=preg_replace("'<[\......
  • cxGrid【过滤、排序】后获取选中记录的值和cxGrid空表判断
    方法一:使用函数GetRowValue此方法在表格过滤、排序后也正常,请注意:此代码顺序需要CXGRID的列顺序和ADOQUERY中SELECT的字段顺序一致,否则会取错。procedureTfrmBillExtraction.pmGetBill_D_DatasClick(Sender:TObject);varI,J:Integer;beginwithcxGDBTV_Bill_M.Data......
  • Antd 4.x Tabs组件 将末尾TabPane固定在右侧
    将最后一个TabPane固定在右侧先看效果代码样式设置注意先看效果代码 <TabPanetitle="Tab1"> </TabPane> <TabPanetitle="Tab2"> </TabPane> <TabPanetitle="Tab3"</......