用户从全局唯一改成租户范围唯一

This commit is contained in:
shiningrise 2025-09-18 09:23:11 +08:00
parent 8ed93030a4
commit 9dd4383a04
2 changed files with 24 additions and 4 deletions

View File

@ -20,6 +20,8 @@ public class SysAuthService : IDynamicApiController, ITransient
private readonly SqlSugarRepository<SysUser> _sysUserRep; private readonly SqlSugarRepository<SysUser> _sysUserRep;
private readonly SysConfigService _sysConfigService; private readonly SysConfigService _sysConfigService;
private readonly SysCacheService _sysCacheService; private readonly SysCacheService _sysCacheService;
private readonly SysTenantService _sysTenantService;
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ICaptcha _captcha; private readonly ICaptcha _captcha;
private readonly IEventPublisher _eventPublisher; private readonly IEventPublisher _eventPublisher;
@ -28,6 +30,7 @@ public class SysAuthService : IDynamicApiController, ITransient
SqlSugarRepository<SysUser> sysUserRep, SqlSugarRepository<SysUser> sysUserRep,
SysConfigService sysConfigService, SysConfigService sysConfigService,
SysCacheService sysCacheService, SysCacheService sysCacheService,
SysTenantService sysTenantService,
IHttpContextAccessor httpContextAccessor, IHttpContextAccessor httpContextAccessor,
ICaptcha captcha, ICaptcha captcha,
IEventPublisher eventPublisher) IEventPublisher eventPublisher)
@ -36,6 +39,7 @@ public class SysAuthService : IDynamicApiController, ITransient
_sysUserRep = sysUserRep; _sysUserRep = sysUserRep;
_sysConfigService = sysConfigService; _sysConfigService = sysConfigService;
_sysCacheService = sysCacheService; _sysCacheService = sysCacheService;
_sysTenantService = sysTenantService;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
_captcha = captcha; _captcha = captcha;
_eventPublisher = eventPublisher; _eventPublisher = eventPublisher;
@ -114,8 +118,8 @@ public class SysAuthService : IDynamicApiController, ITransient
//} //}
// 判断账号是否存在 // 判断账号是否存在
var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg).ClearFilter<ITenantIdFilter>() var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg)
//.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))
.FirstAsync(); .FirstAsync();
@ -405,4 +409,20 @@ public class SysAuthService : IDynamicApiController, ITransient
return 401; return 401;
} }
} }
/// <summary>
/// 根据域名获取租户ID 🔖
/// </summary>
/// <returns></returns>
[SuppressMonitor]
[DisplayName("根据域名获取租户ID")]
[AllowAnonymous]
public long GetTenantIdByHostname(string hostname)
{
var list = _sysCacheService.Get<List<SysTenant>>(CacheConst.KeyTenant);
var tenant = list.Find(p => p.Host.Contains(hostname));
if(tenant != null)
return tenant.Id;
return 0;
}
} }

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<ITenantIdFilter>(); var query = _sysUserRep.AsQueryable();
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<ITenantIdFilter>().Where(u => u.Id != input.Id); var query = _sysUserRep.AsQueryable().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);