コード例 #1
0
        /// <summary>
        /// Registers the <see cref="DbContext"/> to be used by the Identity system.
        /// </summary>
        /// <param name="options">Options for configuring the IdentityServer API feature.</param>
        /// <param name="configureAction">Configuration for <see cref="ExtendedIdentityDbContext{TUser, TRole}"/>.</param>
        public static void AddDbContext(this IdentityServerApiEndpointsOptions options, Action <IdentityDbContextOptions> configureAction)
        {
            var dbContextOptions = new IdentityDbContextOptions();

            configureAction?.Invoke(dbContextOptions);
            options.Services.AddSingleton(dbContextOptions);
            options.Services.AddDbContext <ExtendedIdentityDbContext <User, Role> >(dbContextOptions.ConfigureDbContext);
        }
コード例 #2
0
        public async Task <IActionResult> GetUsers([FromQuery] ListOptions <UserListFilter> options)
        {
            var query = _dbContext.Users.AsNoTracking();

            if (options?.Filter != null)
            {
                var filter = options.Filter;
                query = query.Where(x => filter.Claim == null || x.Claims.Any(x => x.ClaimType == filter.Claim.Type && x.ClaimValue == filter.Claim.Value));
            }
            // https://docs.microsoft.com/en-us/ef/core/querying/complex-query-operators
            var usersQuery =
                from user in query
                join fnl in _dbContext.UserClaims
                on new { user.Id, ClaimType = JwtClaimTypes.GivenName }
            equals new { Id = fnl.UserId, fnl.ClaimType } into fnLeft
            from fn in fnLeft.DefaultIfEmpty()
            join lnl in _dbContext.UserClaims
                on new { user.Id, ClaimType = JwtClaimTypes.FamilyName }
            equals new { Id = lnl.UserId, lnl.ClaimType } into lnLeft
            from ln in lnLeft.DefaultIfEmpty()
            select new UserInfo {
                Id                       = user.Id,
                FirstName                = fn.ClaimValue,
                LastName                 = ln.ClaimValue,
                Email                    = user.Email,
                EmailConfirmed           = user.EmailConfirmed,
                PhoneNumber              = user.PhoneNumber,
                PhoneNumberConfirmed     = user.PhoneNumberConfirmed,
                UserName                 = user.UserName,
                CreateDate               = user.CreateDate,
                LockoutEnabled           = user.LockoutEnabled,
                LockoutEnd               = user.LockoutEnd,
                TwoFactorEnabled         = user.TwoFactorEnabled,
                Blocked                  = user.Blocked,
                PasswordExpirationPolicy = user.PasswordExpirationPolicy,
                IsAdmin                  = user.Admin,
                AccessFailedCount        = user.AccessFailedCount,
                LastSignInDate           = user.LastSignInDate,
                PasswordExpirationDate   = user.PasswordExpirationDate
            };

            if (options?.Search?.Length > 2)
            {
                var userSearchFilterExpression = await IdentityDbContextOptions.UserSearchFilter(_dbContext, options.Search);

                usersQuery = usersQuery.Where(userSearchFilterExpression);
            }
            if (options?.Filter?.UserId?.Any() == true)
            {
                usersQuery = usersQuery.Where(x => options.Filter.UserId.Contains(x.Id));
            }
            return(Ok(await usersQuery.ToResultSetAsync(options)));
        }