mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-03-03 04:30:57 +08:00
feat(GlobalFilter): 添加过滤器类型支持并优化各操作过滤逻辑
为全局过滤器添加类型支持(查询、更新、删除),并修改相关操作(Select/Update/Delete)的过滤逻辑,确保只应用对应类型的过滤器。同时修复了RepositoryDbSet中过滤器的禁用逻辑,使其与操作类型匹配。
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using FreeSql.Extensions.EntityUtil;
|
||||
using FreeSql.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -32,7 +33,9 @@ namespace FreeSql
|
||||
{
|
||||
var select = base.OrmSelect(dywhere);
|
||||
if (_repo._asTablePriv != null) select.AsTable(_repo._asTablePriv);
|
||||
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
|
||||
var disableFilter = _repo.DataFilter._filtersByOrm
|
||||
.Where(a => a.Value.IsEnabled == false || (a.Value.Filter.FilterType & GlobalFilter.FilterType.Query) != GlobalFilter.FilterType.Query)
|
||||
.Select(a => a.Key).ToArray();
|
||||
if (disableFilter.Any()) select.DisableGlobalFilter(disableFilter);
|
||||
return select;
|
||||
}
|
||||
@@ -40,8 +43,8 @@ namespace FreeSql
|
||||
protected override IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
var update = base.OrmUpdate(entitys);
|
||||
if (_repo._asTablePriv != null) update.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
|
||||
if (_repo._asTablePriv != null) update.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false || (a.Value.Filter.FilterType & GlobalFilter.FilterType.Update) != GlobalFilter.FilterType.Update).Select(a => a.Key).ToArray();
|
||||
if (disableFilter.Any()) update.DisableGlobalFilter(disableFilter);
|
||||
return update;
|
||||
}
|
||||
@@ -49,25 +52,25 @@ namespace FreeSql
|
||||
protected override IDelete<TEntity> OrmDelete(object dywhere)
|
||||
{
|
||||
var delete = base.OrmDelete(dywhere);
|
||||
if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
|
||||
if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
var disableFilter = _repo.DataFilter._filtersByOrm.Where(a => a.Value.IsEnabled == false || (a.Value.Filter.FilterType & GlobalFilter.FilterType.Delete) != GlobalFilter.FilterType.Delete).Select(a => a.Key).ToArray();
|
||||
if (disableFilter.Any()) delete.DisableGlobalFilter(disableFilter);
|
||||
return delete;
|
||||
}
|
||||
internal IDelete<TEntity> OrmDeleteInternal(object dywhere) => OrmDelete(dywhere);
|
||||
|
||||
protected override IDelete<object> OrmDeleteAsType(Type entityType)
|
||||
{
|
||||
var delete = base.OrmDeleteAsType(entityType);
|
||||
if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
protected override IDelete<object> OrmDeleteAsType(Type entityType)
|
||||
{
|
||||
var delete = base.OrmDeleteAsType(entityType);
|
||||
if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
return delete;
|
||||
}
|
||||
}
|
||||
|
||||
protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
||||
protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
||||
protected override IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys)
|
||||
{
|
||||
var insert = base.OrmInsert(entitys);
|
||||
if (_repo._asTablePriv != null) insert.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
if (_repo._asTablePriv != null) insert.AsTable(old => _repo._asTablePriv(_entityType, old));
|
||||
return insert;
|
||||
}
|
||||
internal IInsert<TEntity> OrmInsertInternal(TEntity entity) => OrmInsert(entity);
|
||||
|
||||
@@ -80,7 +80,6 @@ namespace FreeSql
|
||||
get => _unitOfWork;
|
||||
}
|
||||
public IUpdate<TEntity> UpdateDiy => _dbset.OrmUpdateInternal(null);
|
||||
|
||||
public virtual ISelect<TEntity> Select => _dbset.OrmSelectInternal(null);
|
||||
public ISelect<TEntity> Where(Expression<Func<TEntity, bool>> exp) => Select.Where(exp);
|
||||
public ISelect<TEntity> WhereIf(bool condition, Expression<Func<TEntity, bool>> exp) => Select.WhereIf(condition, exp);
|
||||
|
||||
Reference in New Issue
Block a user