public async Task <IEnumerable <TUserDto> > Search(UsersTenantSearch searchModel) { var usersQuery = dbContext.Users.AsQueryable(); if (!string.IsNullOrEmpty(searchModel.Username)) { usersQuery = usersQuery .Where(x => x.NormalizedUserName == searchModel.Username.ToUpperInvariant()); } // If tenant claims must be processed if (searchModel.RoleId != null || searchModel.TenantId != null) { var tenantClaims = await dbContext .UserClaims .Where(x => x.ClaimType == TenantClaimsSchema.TenantRolesData) .Where(x => usersQuery.Select(y => y.Id).Contains(x.UserId)) .ToListAsync(); var usersClaimQuery = tenantClaims .Select(x => new { userClaim = x, tenantRoleClaim = x.ToClaim().Value.DeserializeToTenantRolesClaimData() }); if (searchModel.RoleId != null) { usersClaimQuery = usersClaimQuery.Where(x => x.tenantRoleClaim.Roles.Where(x => x.Id == searchModel.RoleId).Any()); } if (searchModel.TenantId != null) { usersClaimQuery = usersClaimQuery.Where(x => x.tenantRoleClaim.TenantId == searchModel.TenantId); } var userIdsQuery = usersClaimQuery.Select(x => x.userClaim.UserId).Distinct(); usersQuery = usersQuery .Where(x => userIdsQuery.Contains(x.Id)); } return(await usersQuery .ProjectTo <TUserDto>(mapper.ConfigurationProvider) .ToListAsync()); }
public async Task <IdentityUtilsResult <TUserDto> > Search(UsersTenantSearch search) => (await RestClient.Post <IEnumerable <TUserDto> >($"{BasePath}/search", search)).ToIdentityResult();
public virtual async Task <IEnumerable <TUserDto> > Search([FromBody] UsersTenantSearch search) => await userManager.Search(search);