🍍 refactor(Core): 替换ClearFilter方法为IgnoreTenant

This commit is contained in:
喵你个汪呀 2025-08-19 20:59:04 +08:00
parent 6358bd2b64
commit 07903f0866
11 changed files with 148 additions and 89 deletions

View File

@ -79,7 +79,7 @@ public class AppAuthService : IDynamicApiController, ITransient
throw Oops.Oh(ErrorCodeEnum.Z1003); throw Oops.Oh(ErrorCodeEnum.Z1003);
// 账号是否存在 // 账号是否存在
var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg).ClearFilter().FirstAsync(u => u.Account.Equals(input.Account)); var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg).IgnoreTenant().FirstAsync(u => u.Account.Equals(input.Account));
_ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009); _ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009);
// 账号是否被冻结 // 账号是否被冻结
@ -147,7 +147,7 @@ public class AppAuthService : IDynamicApiController, ITransient
throw Oops.Oh("验证码错误!"); throw Oops.Oh("验证码错误!");
// 账号是否存在 // 账号是否存在
var user = await _sysUserRep.AsQueryable().Includes(u => u.SysOrg).ClearFilter().FirstAsync(u => u.Phone.Equals(input.Phone)); var user = await _sysUserRep.AsQueryable().Includes(u => u.SysOrg).IgnoreTenant().FirstAsync(u => u.Phone.Equals(input.Phone));
_ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009); _ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009);
return await CreateToken(user); return await CreateToken(user);

View File

@ -370,6 +370,8 @@ public static class RepositoryExtension
//}); //});
} }
#region
/// <summary> /// <summary>
/// 忽略租户 /// 忽略租户
/// </summary> /// </summary>
@ -381,6 +383,63 @@ public static class RepositoryExtension
return ignore ? queryable.ClearFilter<ITenantIdFilter>() : queryable; return ignore ? queryable.ClearFilter<ITenantIdFilter>() : queryable;
} }
/// <summary>
/// 忽略租户
/// </summary>
/// <param name="queryable"></param>
/// <param name="ignore">是否忽略 默认true</param>
/// <returns> </returns>
public static ISugarQueryable<T, T2> IgnoreTenant<T, T2>(this ISugarQueryable<T, T2> queryable, bool ignore = true)
{
return ignore ? queryable.ClearFilter<ITenantIdFilter>() : queryable;
}
/// <summary>
/// 忽略租户
/// </summary>
/// <param name="queryable"></param>
/// <param name="ignore">是否忽略 默认true</param>
/// <returns> </returns>
public static ISugarQueryable<T, T2, T3> IgnoreTenant<T, T2, T3>(this ISugarQueryable<T, T2, T3> queryable, bool ignore = true)
{
return ignore ? queryable.ClearFilter<ITenantIdFilter>() : queryable;
}
/// <summary>
/// 忽略租户
/// </summary>
/// <param name="queryable"></param>
/// <param name="ignore">是否忽略 默认true</param>
/// <returns> </returns>
public static ISugarQueryable<T, T2, T3, T4> IgnoreTenant<T, T2, T3, T4>(this ISugarQueryable<T, T2, T3, T4> queryable, bool ignore = true)
{
return ignore ? queryable.ClearFilter<ITenantIdFilter>() : queryable;
}
/// <summary>
/// 忽略租户
/// </summary>
/// <param name="queryable"></param>
/// <param name="ignore">是否忽略 默认true</param>
/// <returns> </returns>
public static ISugarQueryable<T, T2, T3, T4, T5> IgnoreTenant<T, T2, T3, T4, T5>(this ISugarQueryable<T, T2, T3, T4, T5> queryable, bool ignore = true)
{
return ignore ? queryable.ClearFilter<ITenantIdFilter>() : queryable;
}
/// <summary>
/// 忽略租户
/// </summary>
/// <param name="queryable"></param>
/// <param name="ignore">是否忽略 默认true</param>
/// <returns> </returns>
public static ISugarQueryable<T, T2, T3, T4, T5, T6> IgnoreTenant<T, T2, T3, T4, T5, T6>(this ISugarQueryable<T, T2, T3, T4, T5, T6> queryable, bool ignore = true)
{
return ignore ? queryable.ClearFilter<ITenantIdFilter>() : queryable;
}
#endregion
/// <summary> /// <summary>
/// 只更新某些列 /// 只更新某些列
/// </summary> /// </summary>

View File

@ -114,7 +114,7 @@ public class SysAuthService : IDynamicApiController, ITransient
//} //}
// 判断账号是否存在 // 判断账号是否存在
var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg).ClearFilter() var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg).IgnoreTenant()
//.WhereIF(tenantId > 0, u => u.TenantId == tenantId) //.WhereIF(tenantId > 0, u => u.TenantId == tenantId)
.WhereIF(!string.IsNullOrWhiteSpace(account), u => u.Account.Equals(account)) .WhereIF(!string.IsNullOrWhiteSpace(account), u => u.Account.Equals(account))
.WhereIF(!string.IsNullOrWhiteSpace(phone), u => u.Phone.Equals(phone)) .WhereIF(!string.IsNullOrWhiteSpace(phone), u => u.Phone.Equals(phone))

View File

@ -187,7 +187,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
if (dictDataList == null) if (dictDataList == null)
{ {
dictDataList = await _sysDictDataRep.Change<SysDictType>().AsQueryable() dictDataList = await _sysDictDataRep.Change<SysDictType>().AsQueryable()
.LeftJoin<SysDictData>((u, a) => u.Id == a.DictTypeId).ClearFilter() .LeftJoin<SysDictData>((u, a) => u.Id == a.DictTypeId).IgnoreTenant()
.WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code) .WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code)
.WhereIF(typeId != null && typeId > 0, u => u.Id == typeId) .WhereIF(typeId != null && typeId > 0, u => u.Id == typeId)
.Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable) .Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable)

View File

@ -163,7 +163,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient
public async Task<dynamic> GetAllDictList() public async Task<dynamic> GetAllDictList()
{ {
var ds = await _sysDictTypeRep.AsQueryable() var ds = await _sysDictTypeRep.AsQueryable()
.InnerJoin<SysDictData>((u, a) => u.Id == a.DictTypeId).ClearFilter() .InnerJoin<SysDictData>((u, a) => u.Id == a.DictTypeId).IgnoreTenant()
.Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable) .Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable)
.Select((u, a) => new { TypeCode = u.Code, a.Label, a.Value, a.Code, a.Remark, a.OrderNo, a.TagType, a.ExtData }) .Select((u, a) => new { TypeCode = u.Code, a.Label, a.Value, a.Code, a.Remark, a.OrderNo, a.TagType, a.ExtData })
.ToListAsync(); .ToListAsync();

View File

@ -61,7 +61,7 @@ public class SysFileService : IDynamicApiController, ITransient
public async Task<SqlSugarPagedList<SysFile>> Page(PageFileInput input) public async Task<SqlSugarPagedList<SysFile>> Page(PageFileInput input)
{ {
// 获取所有公开文件 // 获取所有公开文件
var publicList = _sysFileRep.AsQueryable().ClearFilter().Where(u => u.IsPublic == true); var publicList = _sysFileRep.AsQueryable().IgnoreTenant().Where(u => u.IsPublic == true);
// 获取私有文件 // 获取私有文件
var privateList = _sysFileRep.AsQueryable().Where(u => u.IsPublic == false); var privateList = _sysFileRep.AsQueryable().Where(u => u.IsPublic == false);
// 合并公开和私有并分页 // 合并公开和私有并分页
@ -179,7 +179,7 @@ public class SysFileService : IDynamicApiController, ITransient
[DisplayName("下载指定文件Base64格式")] [DisplayName("下载指定文件Base64格式")]
public async Task<string> DownloadFileBase64([FromBody] string url) public async Task<string> DownloadFileBase64([FromBody] string url)
{ {
var sysFile = await _sysFileRep.AsQueryable().ClearFilter().FirstAsync(u => u.Url == url) ?? throw Oops.Oh($"文件不存在"); var sysFile = await _sysFileRep.AsQueryable().IgnoreTenant().FirstAsync(u => u.Url == url) ?? throw Oops.Oh($"文件不存在");
return await _customFileProvider.DownloadFileBase64Async(sysFile); return await _customFileProvider.DownloadFileBase64Async(sysFile);
} }
@ -222,7 +222,7 @@ public class SysFileService : IDynamicApiController, ITransient
public async Task<SysFile> GetFile([FromQuery] long id, [FromQuery] bool isClearFilter = false) public async Task<SysFile> GetFile([FromQuery] long id, [FromQuery] bool isClearFilter = false)
{ {
var file = isClearFilter var file = isClearFilter
? await _sysFileRep.CopyNew().AsQueryable().ClearFilter().FirstAsync(u => u.Id == id) ? await _sysFileRep.CopyNew().AsQueryable().IgnoreTenant().FirstAsync(u => u.Id == id)
: await _sysFileRep.CopyNew().GetByIdAsync(id); : await _sysFileRep.CopyNew().GetByIdAsync(id);
return file ?? throw Oops.Oh(ErrorCodeEnum.D8000); return file ?? throw Oops.Oh(ErrorCodeEnum.D8000);
} }
@ -456,7 +456,7 @@ public class SysFileService : IDynamicApiController, ITransient
public async Task<List<SysFile>> GetFileListByDataId([FromQuery] long dataId, [FromQuery] bool isClearFilter = false) public async Task<List<SysFile>> GetFileListByDataId([FromQuery] long dataId, [FromQuery] bool isClearFilter = false)
{ {
return isClearFilter return isClearFilter
? await _sysFileRep.CopyNew().AsQueryable().ClearFilter().Where(u => u.DataId == dataId).ToListAsync() ? await _sysFileRep.CopyNew().AsQueryable().IgnoreTenant().Where(u => u.DataId == dataId).ToListAsync()
: await _sysFileRep.CopyNew().GetListAsync(u => u.DataId == dataId); : await _sysFileRep.CopyNew().GetListAsync(u => u.DataId == dataId);
} }

View File

@ -85,7 +85,7 @@ public class SysOAuthService : IDynamicApiController, ITransient
} }
// 若账号不存在则新建 // 若账号不存在则新建
var wechatUser = await _sysOAuthUserRep.AsQueryable().Includes(u => u.SysUser).ClearFilter().FirstAsync(u => u.OpenId == openIdClaim.Value); var wechatUser = await _sysOAuthUserRep.AsQueryable().Includes(u => u.SysUser).IgnoreTenant().FirstAsync(u => u.OpenId == openIdClaim.Value);
if (wechatUser == null) if (wechatUser == null)
{ {
var userId = await App.GetRequiredService<SysUserService>().AddUser(new AddUserInput() var userId = await App.GetRequiredService<SysUserService>().AddUser(new AddUserInput()
@ -109,7 +109,7 @@ public class SysOAuthService : IDynamicApiController, ITransient
PlatformType = platformType PlatformType = platformType
}); });
wechatUser = await _sysOAuthUserRep.AsQueryable().Includes(u => u.SysUser).ClearFilter().FirstAsync(u => u.OpenId == openIdClaim.Value); wechatUser = await _sysOAuthUserRep.AsQueryable().Includes(u => u.SysUser).IgnoreTenant().FirstAsync(u => u.OpenId == openIdClaim.Value);
} }
// 构建Token令牌默认回调登录为PC模式 // 构建Token令牌默认回调登录为PC模式

View File

@ -130,7 +130,7 @@ public class SysReportDataSourceService : IDynamicApiController, ITransient
// 从租户获取数据源 // 从租户获取数据源
var tenantList = await _tenantRep.AsQueryable() var tenantList = await _tenantRep.AsQueryable()
.LeftJoin<SysOrg>((u, o) => u.OrgId == o.Id).ClearFilter() .LeftJoin<SysOrg>((u, o) => u.OrgId == o.Id).IgnoreTenant()
.Where((u, o) => u.TenantType == TenantTypeEnum.Db) .Where((u, o) => u.TenantType == TenantTypeEnum.Db)
.Select((u, o) => new { u.Id, o.Name, u.DbType, u.Connection }) .Select((u, o) => new { u.Id, o.Name, u.DbType, u.Connection })
.ToListAsync(); .ToListAsync();

View File

@ -70,8 +70,8 @@ public class SysTenantService : IDynamicApiController, ITransient
public async Task<SqlSugarPagedList<TenantOutput>> Page(PageTenantInput input) public async Task<SqlSugarPagedList<TenantOutput>> Page(PageTenantInput input)
{ {
return await _sysTenantRep.AsQueryable() return await _sysTenantRep.AsQueryable()
.LeftJoin<SysUser>((u, a) => u.UserId == a.Id).ClearFilter() .LeftJoin<SysUser>((u, a) => u.UserId == a.Id).IgnoreTenant()
.LeftJoin<SysOrg>((u, a, b) => u.OrgId == b.Id).ClearFilter() .LeftJoin<SysOrg>((u, a, b) => u.OrgId == b.Id).IgnoreTenant()
.WhereIF(!string.IsNullOrWhiteSpace(input.Phone), (u, a) => a.Phone.Contains(input.Phone.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Phone), (u, a) => a.Phone.Contains(input.Phone.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), (u, a, b) => b.Name.Contains(input.Name.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Name), (u, a, b) => b.Name.Contains(input.Name.Trim()))
.WhereIF(!input.IncludeDefault, u => u.Id.ToString() != SqlSugarConst.MainConfigId) // 排除默认主库/主租户 .WhereIF(!input.IncludeDefault, u => u.Id.ToString() != SqlSugarConst.MainConfigId) // 排除默认主库/主租户
@ -121,7 +121,7 @@ public class SysTenantService : IDynamicApiController, ITransient
if (await _sysOrgRep.IsAnyAsync(u => u.Name == input.Name)) if (await _sysOrgRep.IsAnyAsync(u => u.Name == input.Name))
throw Oops.Oh(ErrorCodeEnum.D1300); throw Oops.Oh(ErrorCodeEnum.D1300);
if (await _sysUserRep.AsQueryable().ClearFilter().AnyAsync(u => u.Account == input.AdminAccount)) if (await _sysUserRep.AsQueryable().IgnoreTenant().AnyAsync(u => u.Account == input.AdminAccount))
throw Oops.Oh(ErrorCodeEnum.D1301); throw Oops.Oh(ErrorCodeEnum.D1301);
// 从库配置判断 // 从库配置判断
@ -237,7 +237,7 @@ public class SysTenantService : IDynamicApiController, ITransient
// 默认租户管理员角色菜单集合(工作台、账号管理、角色管理、机构管理、职位管理、个人中心、通知公告) // 默认租户管理员角色菜单集合(工作台、账号管理、角色管理、机构管理、职位管理、个人中心、通知公告)
var menuPidList = new List<long> { 1300000000101, 1310000000111, 1310000000131, 1310000000141, 1310000000151, 1310000000161, 1310000000171 }; var menuPidList = new List<long> { 1300000000101, 1310000000111, 1310000000131, 1310000000141, 1310000000151, 1310000000161, 1310000000171 };
var menuIdList = await _sysMenuRep.AsQueryable().ClearFilter() var menuIdList = await _sysMenuRep.AsQueryable().IgnoreTenant()
.Where(u => menuPidList.Contains(u.Id) || menuPidList.Contains(u.Pid)).Select(u => u.Id).ToListAsync(); .Where(u => menuPidList.Contains(u.Id) || menuPidList.Contains(u.Pid)).Select(u => u.Id).ToListAsync();
await _sysRoleMenuService.GrantRoleMenu(new RoleMenuInput() { Id = newRole.Id, MenuIdList = menuIdList }); await _sysRoleMenuService.GrantRoleMenu(new RoleMenuInput() { Id = newRole.Id, MenuIdList = menuIdList });
@ -268,7 +268,7 @@ public class SysTenantService : IDynamicApiController, ITransient
await CacheTenant(input.Id); await CacheTenant(input.Id);
// 删除与租户相关的表数据 // 删除与租户相关的表数据
var users = await _sysUserRep.AsQueryable().ClearFilter().Where(u => u.TenantId == input.Id).ToListAsync(); var users = await _sysUserRep.AsQueryable().IgnoreTenant().Where(u => u.TenantId == input.Id).ToListAsync();
var userIds = users.Select(u => u.Id).ToList(); var userIds = users.Select(u => u.Id).ToList();
await _sysUserRep.AsDeleteable().Where(u => userIds.Contains(u.Id)).ExecuteCommandAsync(); await _sysUserRep.AsDeleteable().Where(u => userIds.Contains(u.Id)).ExecuteCommandAsync();
@ -278,7 +278,7 @@ public class SysTenantService : IDynamicApiController, ITransient
await _sysRoleRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync(); await _sysRoleRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync();
var roleIds = await _sysRoleRep.AsQueryable().ClearFilter().Where(u => u.TenantId == input.Id).Select(u => u.Id).ToListAsync(); var roleIds = await _sysRoleRep.AsQueryable().IgnoreTenant().Where(u => u.TenantId == input.Id).Select(u => u.Id).ToListAsync();
await _sysRoleMenuRep.AsDeleteable().Where(u => roleIds.Contains(u.RoleId)).ExecuteCommandAsync(); await _sysRoleMenuRep.AsDeleteable().Where(u => roleIds.Contains(u.RoleId)).ExecuteCommandAsync();
await _sysOrgRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync(); await _sysOrgRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync();
@ -336,7 +336,7 @@ public class SysTenantService : IDynamicApiController, ITransient
public async Task GrantMenu(RoleMenuInput input) public async Task GrantMenu(RoleMenuInput input)
{ {
// 获取租户管理员角色【sys_admin】 // 获取租户管理员角色【sys_admin】
var adminRole = await _sysRoleRep.AsQueryable().ClearFilter() var adminRole = await _sysRoleRep.AsQueryable().IgnoreTenant()
.FirstAsync(u => u.Code == CommonConst.SysAdminRole && u.TenantId == input.Id && u.IsDelete == false); .FirstAsync(u => u.Code == CommonConst.SysAdminRole && u.TenantId == input.Id && u.IsDelete == false);
if (adminRole == null) return; if (adminRole == null) return;
@ -470,7 +470,7 @@ public class SysTenantService : IDynamicApiController, ITransient
[DisplayName("获取租户下的用户列表")] [DisplayName("获取租户下的用户列表")]
public async Task<List<SysUser>> UserList(TenantIdInput input) public async Task<List<SysUser>> UserList(TenantIdInput input)
{ {
return await _sysUserRep.AsQueryable().ClearFilter().Where(u => u.TenantId == input.TenantId).ToListAsync(); return await _sysUserRep.AsQueryable().IgnoreTenant().Where(u => u.TenantId == input.TenantId).ToListAsync();
} }
/// <summary> /// <summary>
@ -480,7 +480,7 @@ public class SysTenantService : IDynamicApiController, ITransient
[DisplayName("获取所有租户数据库列表")] [DisplayName("获取所有租户数据库列表")]
public async Task<List<DbOutput>> GetTenantDbList() public async Task<List<DbOutput>> GetTenantDbList()
{ {
var tenantDbList = await _sysTenantRep.AsQueryable().ClearFilter() var tenantDbList = await _sysTenantRep.AsQueryable().IgnoreTenant()
.LeftJoin<SysOrg>((u, a) => u.OrgId == a.Id) .LeftJoin<SysOrg>((u, a) => u.OrgId == a.Id)
//.GroupBy(u => new { u.DbType, u.Connection }) //.GroupBy(u => new { u.DbType, u.Connection })
.Where(u => u.Status == StatusEnum.Enable) .Where(u => u.Status == StatusEnum.Enable)

View File

@ -109,7 +109,7 @@ public class SysUserService : IDynamicApiController, ITransient
// 是否有权操作此账号 // 是否有权操作此账号
if (!_userManager.SuperAdmin && input.AccountType is AccountTypeEnum.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D1033); if (!_userManager.SuperAdmin && input.AccountType is AccountTypeEnum.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D1033);
var query = _sysUserRep.AsQueryable().ClearFilter(); var query = _sysUserRep.AsQueryable().IgnoreTenant();
if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003); if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032); if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
@ -142,7 +142,7 @@ public class SysUserService : IDynamicApiController, ITransient
[DisplayName("更新用户")] [DisplayName("更新用户")]
public virtual async Task UpdateUser(UpdateUserInput input) public virtual async Task UpdateUser(UpdateUserInput input)
{ {
var query = _sysUserRep.AsQueryable().ClearFilter().Where(u => u.Id != input.Id); var query = _sysUserRep.AsQueryable().IgnoreTenant().Where(u => u.Id != input.Id);
if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003); if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032); if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);

View File

@ -57,7 +57,7 @@ public class GoViewSysService : IDynamicApiController
tenant.Captcha = true; tenant.Captcha = true;
_sysCacheService.Set(CacheConst.KeyTenant, tenantList); _sysCacheService.Set(CacheConst.KeyTenant, tenantList);
var sysUser = await _sysUserRep.AsQueryable().ClearFilter().FirstAsync(u => u.Account.Equals(input.Username)); var sysUser = await _sysUserRep.AsQueryable().IgnoreTenant().FirstAsync(u => u.Account.Equals(input.Username));
return new GoViewLoginOutput() return new GoViewLoginOutput()
{ {
Userinfo = new GoViewLoginUserInfo Userinfo = new GoViewLoginUserInfo