🍍 refactor(Core): 替换ClearFilter方法为IgnoreTenant
This commit is contained in:
parent
6358bd2b64
commit
07903f0866
@ -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);
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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))
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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模式
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -66,12 +66,12 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[DisplayName("获取租户分页列表")]
|
[DisplayName("获取租户分页列表")]
|
||||||
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) // 排除默认主库/主租户
|
||||||
@ -112,26 +112,26 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
[ApiDescriptionSettings(Name = "Add"), HttpPost]
|
[ApiDescriptionSettings(Name = "Add"), HttpPost]
|
||||||
[DisplayName("增加租户")]
|
[DisplayName("增加租户")]
|
||||||
public async Task AddTenant(AddTenantInput input)
|
public async Task AddTenant(AddTenantInput input)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(input.Connection))
|
if (string.IsNullOrWhiteSpace(input.Connection))
|
||||||
throw Oops.Oh(ErrorCodeEnum.Z1004);
|
throw Oops.Oh(ErrorCodeEnum.Z1004);
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
// 从库配置判断
|
// 从库配置判断
|
||||||
if (input.TenantType == TenantTypeEnum.Db && !string.IsNullOrWhiteSpace(input.SlaveConnections) && !JSON.IsValid(input.SlaveConnections, true))
|
if (input.TenantType == TenantTypeEnum.Db && !string.IsNullOrWhiteSpace(input.SlaveConnections) && !JSON.IsValid(input.SlaveConnections, true))
|
||||||
throw Oops.Oh(ErrorCodeEnum.D1302);
|
throw Oops.Oh(ErrorCodeEnum.D1302);
|
||||||
|
|
||||||
// 以租户Id作为库标识
|
// 以租户Id作为库标识
|
||||||
input.Id = YitIdHelper.NextId();
|
input.Id = YitIdHelper.NextId();
|
||||||
input.ConfigId = input.Id.ToString();
|
input.ConfigId = input.Id.ToString();
|
||||||
|
|
||||||
var tenant = input.Adapt<TenantOutput>();
|
var tenant = input.Adapt<TenantOutput>();
|
||||||
await _sysTenantRep.InsertAsync(tenant);
|
await _sysTenantRep.InsertAsync(tenant);
|
||||||
await InitNewTenant(tenant);
|
await InitNewTenant(tenant);
|
||||||
@ -144,7 +144,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[DisplayName("设置租户状态")]
|
[DisplayName("设置租户状态")]
|
||||||
public async Task<int> SetStatus(TenantInput input)
|
public async Task<int> SetStatus(TenantInput input)
|
||||||
{
|
{
|
||||||
var tenant = await _sysTenantRep.GetByIdAsync(input.Id);
|
var tenant = await _sysTenantRep.GetByIdAsync(input.Id);
|
||||||
@ -187,7 +187,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
TenantId = tenantId,
|
TenantId = tenantId,
|
||||||
Name = tenantMark,
|
Name = tenantMark,
|
||||||
Code = CommonConst.SysAdminRole,
|
Code = CommonConst.SysAdminRole,
|
||||||
DataScope = DataScopeEnum.All,
|
DataScope = DataScopeEnum.All,
|
||||||
SysFlag = YesNoEnum.Y,
|
SysFlag = YesNoEnum.Y,
|
||||||
Remark = tenantMark
|
Remark = tenantMark
|
||||||
};
|
};
|
||||||
@ -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 });
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ApiDescriptionSettings(Name = "Delete"), HttpPost]
|
[ApiDescriptionSettings(Name = "Delete"), HttpPost]
|
||||||
[DisplayName("删除租户")]
|
[DisplayName("删除租户")]
|
||||||
public async Task DeleteTenant(DeleteTenantInput input)
|
public async Task DeleteTenant(DeleteTenantInput input)
|
||||||
{
|
{
|
||||||
// 禁止删除默认租户
|
// 禁止删除默认租户
|
||||||
@ -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();
|
||||||
@ -295,17 +295,17 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ApiDescriptionSettings(Name = "Update"), HttpPost]
|
[ApiDescriptionSettings(Name = "Update"), HttpPost]
|
||||||
[DisplayName("更新租户")]
|
[DisplayName("更新租户")]
|
||||||
public async Task UpdateTenant(UpdateTenantInput input)
|
public async Task UpdateTenant(UpdateTenantInput input)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(input.Connection))
|
if (string.IsNullOrWhiteSpace(input.Connection))
|
||||||
throw Oops.Oh(ErrorCodeEnum.Z1004);
|
throw Oops.Oh(ErrorCodeEnum.Z1004);
|
||||||
|
|
||||||
if (await _sysOrgRep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.OrgId))
|
if (await _sysOrgRep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.OrgId))
|
||||||
throw Oops.Oh(ErrorCodeEnum.D1300);
|
throw Oops.Oh(ErrorCodeEnum.D1300);
|
||||||
|
|
||||||
if (await _sysUserRep.IsAnyAsync(u => u.Account == input.AdminAccount && u.Id != input.UserId))
|
if (await _sysUserRep.IsAnyAsync(u => u.Account == input.AdminAccount && u.Id != input.UserId))
|
||||||
throw Oops.Oh(ErrorCodeEnum.D1301);
|
throw Oops.Oh(ErrorCodeEnum.D1301);
|
||||||
|
|
||||||
// 从库配置判断
|
// 从库配置判断
|
||||||
if (input.TenantType == TenantTypeEnum.Db && !string.IsNullOrWhiteSpace(input.SlaveConnections) && !JSON.IsValid(input.SlaveConnections, true))
|
if (input.TenantType == TenantTypeEnum.Db && !string.IsNullOrWhiteSpace(input.SlaveConnections) && !JSON.IsValid(input.SlaveConnections, true))
|
||||||
@ -332,11 +332,11 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
[DisplayName("授权租户管理员角色菜单")]
|
[DisplayName("授权租户管理员角色菜单")]
|
||||||
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;
|
||||||
|
|
||||||
@ -351,7 +351,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[DisplayName("获取租户管理员角色拥有菜单Id集合")]
|
[DisplayName("获取租户管理员角色拥有菜单Id集合")]
|
||||||
public async Task<List<long>> GetOwnMenuList([FromQuery] TenantUserInput input)
|
public async Task<List<long>> GetOwnMenuList([FromQuery] TenantUserInput input)
|
||||||
{
|
{
|
||||||
var roleIds = await _sysUserRoleService.GetUserRoleIdList(input.UserId);
|
var roleIds = await _sysUserRoleService.GetUserRoleIdList(input.UserId);
|
||||||
@ -363,7 +363,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[DisplayName("重置租户管理员密码")]
|
[DisplayName("重置租户管理员密码")]
|
||||||
public async Task<string> ResetPwd(TenantUserInput input)
|
public async Task<string> ResetPwd(TenantUserInput input)
|
||||||
{
|
{
|
||||||
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SysPassword);
|
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SysPassword);
|
||||||
@ -376,7 +376,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// 同步所有租户数据库 🔖
|
/// 同步所有租户数据库 🔖
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[DisplayName("同步所有租户数据库")]
|
[DisplayName("同步所有租户数据库")]
|
||||||
public async Task SyncTenantDb()
|
public async Task SyncTenantDb()
|
||||||
{
|
{
|
||||||
var tenantList = await _sysTenantRep.GetListAsync();
|
var tenantList = await _sysTenantRep.GetListAsync();
|
||||||
@ -391,7 +391,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="tenantId"></param>
|
/// <param name="tenantId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public async Task CacheTenant(long tenantId = 0)
|
public async Task CacheTenant(long tenantId = 0)
|
||||||
{
|
{
|
||||||
// 移除 ISqlSugarClient 中的库连接并排除默认主库
|
// 移除 ISqlSugarClient 中的库连接并排除默认主库
|
||||||
@ -414,7 +414,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[DisplayName("创建租户数据库")]
|
[DisplayName("创建租户数据库")]
|
||||||
public async Task InitTenantDb(TenantInput input)
|
public async Task InitTenantDb(TenantInput input)
|
||||||
{
|
{
|
||||||
var tenant = await _sysTenantRep.GetByIdAsync(input.Id);
|
var tenant = await _sysTenantRep.GetByIdAsync(input.Id);
|
||||||
@ -450,7 +450,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[DisplayName("创建租户数据")]
|
[DisplayName("创建租户数据")]
|
||||||
public async Task InitTenantData(TenantInput input)
|
public async Task InitTenantData(TenantInput input)
|
||||||
{
|
{
|
||||||
var tenant = await _sysTenantRep.GetByIdAsync(input.Id);
|
var tenant = await _sysTenantRep.GetByIdAsync(input.Id);
|
||||||
@ -467,38 +467,38 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[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>
|
||||||
/// 获取所有租户数据库列表 🔖
|
/// 获取所有租户数据库列表 🔖
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[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)
|
||||||
.OrderBy(u => u.ConfigId)
|
.OrderBy(u => u.ConfigId)
|
||||||
.Select((u, a) => new DbOutput()
|
.Select((u, a) => new DbOutput()
|
||||||
{
|
{
|
||||||
DbName = a.Name,
|
DbName = a.Name,
|
||||||
ConfigId = u.ConfigId.ToString(),
|
ConfigId = u.ConfigId.ToString(),
|
||||||
DbType = u.DbType,
|
DbType = u.DbType,
|
||||||
Connection = u.Connection
|
Connection = u.Connection
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
//// 获取数据库名称
|
//// 获取数据库名称
|
||||||
//foreach (var tenantDb in tenantDbList)
|
//foreach (var tenantDb in tenantDbList)
|
||||||
//{
|
//{
|
||||||
// tenantDb.DbName = _sysTenantRep.AsTenant().GetConnectionScope(tenantDb.ConfigId).Ado.Connection.Database;
|
// tenantDb.DbName = _sysTenantRep.AsTenant().GetConnectionScope(tenantDb.ConfigId).Ado.Connection.Database;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
return tenantDbList;
|
return tenantDbList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -506,7 +506,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// 获取租户数据库连接
|
/// 获取租户数据库连接
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public SqlSugarScopeProvider GetTenantDbConnectionScope(long tenantId)
|
public SqlSugarScopeProvider GetTenantDbConnectionScope(long tenantId)
|
||||||
{
|
{
|
||||||
var iTenant = _sysTenantRep.AsTenant();
|
var iTenant = _sysTenantRep.AsTenant();
|
||||||
@ -554,7 +554,7 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[SuppressMonitor]
|
[SuppressMonitor]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
[DisplayName("获取系统信息")]
|
[DisplayName("获取系统信息")]
|
||||||
public async Task<dynamic> GetSysInfo(long tenantId)
|
public async Task<dynamic> GetSysInfo(long tenantId)
|
||||||
{
|
{
|
||||||
//// 还可以根据域名判断租户
|
//// 还可以根据域名判断租户
|
||||||
@ -562,9 +562,9 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
|
|
||||||
if (tenantId < 1) tenantId = long.Parse(App.User?.FindFirst(ClaimConst.TenantId)?.Value ?? "0");
|
if (tenantId < 1) tenantId = long.Parse(App.User?.FindFirst(ClaimConst.TenantId)?.Value ?? "0");
|
||||||
if (tenantId < 1) tenantId = SqlSugarConst.DefaultTenantId;
|
if (tenantId < 1) tenantId = SqlSugarConst.DefaultTenantId;
|
||||||
var tenant = await _sysTenantRep.GetFirstAsync(u => u.Id == tenantId) ?? throw Oops.Oh($"租户信息不存在:{tenantId}");
|
var tenant = await _sysTenantRep.GetFirstAsync(u => u.Id == tenantId) ?? throw Oops.Oh($"租户信息不存在:{tenantId}");
|
||||||
|
|
||||||
// 若租户系统标题为空,则获取默认租户系统信息(兼容已有未配置的租户)
|
// 若租户系统标题为空,则获取默认租户系统信息(兼容已有未配置的租户)
|
||||||
if (string.IsNullOrWhiteSpace(tenant.Title))
|
if (string.IsNullOrWhiteSpace(tenant.Title))
|
||||||
tenant = await _sysTenantRep.GetFirstAsync(u => u.Id == SqlSugarConst.DefaultTenantId);
|
tenant = await _sysTenantRep.GetFirstAsync(u => u.Id == SqlSugarConst.DefaultTenantId);
|
||||||
|
|
||||||
@ -610,20 +610,20 @@ public class SysTenantService : IDynamicApiController, ITransient
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
[DisplayName("保存系统信息")]
|
[DisplayName("保存系统信息")]
|
||||||
public async Task SaveSysInfo(SysInfoInput input)
|
public async Task SaveSysInfo(SysInfoInput input)
|
||||||
{
|
{
|
||||||
input.TenantId = input.TenantId < 1 ? long.Parse(App.User?.FindFirst(ClaimConst.TenantId)?.Value ?? "0") : input.TenantId;
|
input.TenantId = input.TenantId < 1 ? long.Parse(App.User?.FindFirst(ClaimConst.TenantId)?.Value ?? "0") : input.TenantId;
|
||||||
var tenant = await _sysTenantRep.GetFirstAsync(u => u.Id == input.TenantId) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
|
var tenant = await _sysTenantRep.GetFirstAsync(u => u.Id == input.TenantId) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
|
||||||
tenant = input.Adapt<SysTenant>();
|
tenant = input.Adapt<SysTenant>();
|
||||||
tenant.Id = input.TenantId;
|
tenant.Id = input.TenantId;
|
||||||
|
|
||||||
// 先清空轮播图再更新
|
// 先清空轮播图再更新
|
||||||
var carouselFileIds = await _sysTenantRep.ChangeRepository<SqlSugarRepository<SysFile>>().AsQueryable()
|
var carouselFileIds = await _sysTenantRep.ChangeRepository<SqlSugarRepository<SysFile>>().AsQueryable()
|
||||||
.WhereIF(input.CarouselFileIds != null && input.CarouselFileIds.Count != 0, u => !input.CarouselFileIds.Contains(u.Id))
|
.WhereIF(input.CarouselFileIds != null && input.CarouselFileIds.Count != 0, u => !input.CarouselFileIds.Contains(u.Id))
|
||||||
.Where(u => u.FileType == "Carousel" && u.DataId == input.TenantId)
|
.Where(u => u.FileType == "Carousel" && u.DataId == input.TenantId)
|
||||||
.Select(u => u.Id).ToListAsync();
|
.Select(u => u.Id).ToListAsync();
|
||||||
foreach (var fileId in carouselFileIds)
|
foreach (var fileId in carouselFileIds)
|
||||||
await App.GetRequiredService<SysFileService>().DeleteFile(new BaseIdInput { Id = fileId });
|
await App.GetRequiredService<SysFileService>().DeleteFile(new BaseIdInput { Id = fileId });
|
||||||
|
|
||||||
await _sysTenantRep.AsUpdateable(tenant).UpdateColumns(u => new
|
await _sysTenantRep.AsUpdateable(tenant).UpdateColumns(u => new
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user