示例#1
0
        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());
        }
示例#2
0
 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);