指定机构查询用户时包含拥有扩展机构的用户

This commit is contained in:
IMaster 2025-04-24 09:14:19 +08:00
parent 4338c38ea6
commit 076985c76f

View File

@ -63,9 +63,12 @@ public class SysUserService : IDynamicApiController, ITransient
// 获取用户拥有的机构集合 // 获取用户拥有的机构集合
var userOrgIdList = await _sysOrgService.GetUserOrgIdList(); var userOrgIdList = await _sysOrgService.GetUserOrgIdList();
List<long> orgList = null; List<long> orgList = null;
List<long> extOrgUserIdList = null;
if (input.OrgId > 0) // 指定机构查询时 if (input.OrgId > 0) // 指定机构查询时
{ {
orgList = await _sysOrgService.GetChildIdListWithSelfById(input.OrgId); orgList = await _sysOrgService.GetChildIdListWithSelfById(input.OrgId);
var extOrgList = await _sysUserExtOrgService.GetUserExtOrgListForOrg(input.OrgId);
extOrgUserIdList = extOrgList.Select(u => u.UserId).ToList();
orgList = _userManager.SuperAdmin ? orgList : orgList.Where(u => userOrgIdList.Contains(u)).ToList(); orgList = _userManager.SuperAdmin ? orgList : orgList.Where(u => userOrgIdList.Contains(u)).ToList();
} }
else // 各管理员只能看到自己机构下的用户列表 else // 各管理员只能看到自己机构下的用户列表
@ -77,7 +80,7 @@ public class SysUserService : IDynamicApiController, ITransient
.LeftJoin<SysOrg>((u, a) => u.OrgId == a.Id) .LeftJoin<SysOrg>((u, a) => u.OrgId == a.Id)
.LeftJoin<SysPos>((u, a, b) => u.PosId == b.Id) .LeftJoin<SysPos>((u, a, b) => u.PosId == b.Id)
.Where(u => u.AccountType != AccountTypeEnum.SuperAdmin) .Where(u => u.AccountType != AccountTypeEnum.SuperAdmin)
.WhereIF(orgList != null, u => orgList.Contains(u.OrgId)) .WhereIF(orgList != null || extOrgUserList != null, u => orgList.Contains(u.OrgId) || extOrgUserList.Contains(u.Id))
.WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account.Contains(input.Account)) .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account.Contains(input.Account))
.WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName)) .WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName))
.WhereIF(!string.IsNullOrWhiteSpace(input.PosName), (u, a, b) => b.Name.Contains(input.PosName)) .WhereIF(!string.IsNullOrWhiteSpace(input.PosName), (u, a, b) => b.Name.Contains(input.PosName))