public ScopeViewModel(IdentityResource identity, bool check)
 {
     Name = identity.Name;
     DisplayName = identity.DisplayName;
     Description = identity.Description;
     Emphasize = identity.Emphasize;
     Required = identity.Required;
     Checked = check || identity.Required;
 }
Ejemplo n.º 2
0
        public async Task <ApiResult <long> > Put([FromBody] IdentityResource value)
        {
            if (!ModelState.IsValid)
            {
                return(new ApiResult <long>(l,
                                            BasicControllerEnums.UnprocessableEntity,
                                            ModelErrors()));
            }

            using (var tran = configDb.Database.BeginTransaction(IsolationLevel.ReadCommitted))
            {
                try
                {
                    #region Update Entity
                    // 需要先更新value,否则更新如claims等属性会有并发问题
                    configDb.Update(value);
                    configDb.SaveChanges();
                    #endregion

                    #region Find Entity.Source
                    var source = await configDb.IdentityResources.Where(x => x.Id == value.Id)
                                 .Include(x => x.UserClaims)
                                 .AsNoTracking()
                                 .FirstOrDefaultAsync();

                    #endregion

                    #region Update Entity.Claims
                    if (value.UserClaims != null && value.UserClaims.Count > 0)
                    {
                        #region delete
                        var EntityIDs = value.UserClaims.Select(x => x.Id).ToList();
                        if (EntityIDs.Count > 0)
                        {
                            var DeleteEntities = source.UserClaims.Where(x => !EntityIDs.Contains(x.Id)).Select(x => x.Id).ToArray();

                            if (DeleteEntities.Count() > 0)
                            {
                                //var sql = string.Format("DELETE IdentityClaims WHERE ID IN ({0})",
                                //            string.Join(",", DeleteEntities));

                                configDb.Database.ExecuteSqlCommand($"DELETE IdentityClaims WHERE ID IN ({string.Join(",", DeleteEntities)})");
                            }
                        }
                        #endregion

                        #region update
                        var UpdateEntities = value.UserClaims.Where(x => x.Id > 0).ToList();
                        if (UpdateEntities.Count > 0)
                        {
                            UpdateEntities.ForEach(x =>
                            {
                                configDb.Database.ExecuteSqlCommand($"UPDATE IdentityClaims SET [Type]={x.Type} WHERE Id = {x.Id}");
                            });
                        }
                        #endregion

                        #region insert
                        var NewEntities = value.UserClaims.Where(x => x.Id == 0).ToList();
                        if (NewEntities.Count > 0)
                        {
                            NewEntities.ForEach(x =>
                            {
                                configDb.Database.ExecuteSqlCommand($"INSERT INTO IdentityClaims VALUES ({source.Id},{x.Type})");
                            });
                        }
                        #endregion
                    }
                    #endregion

                    tran.Commit();
                }

                catch (Exception ex)
                {
                    tran.Rollback();

                    return(new ApiResult <long>(l,
                                                BasicControllerEnums.ExpectationFailed,
                                                ex.Message));
                }
            }

            return(new ApiResult <long>(value.Id));
        }
 public static Models.IdentityResource ToModel(this IdentityResource resource)
 {
     return(resource == null ? null : Mapper.Map <Models.IdentityResource>(resource));
 }
        public async Task <int> AddIdentityResourceAsync(IdentityResource identityResource)
        {
            _dbContext.IdentityResources.Add(identityResource);

            return(await AutoSaveChangesAsync());
        }
Ejemplo n.º 5
0
        public async Task Should_Retrieve_All_Resources_Including_Hidden_Ones(TestDatabase testDb)
        {
            var visibleIdentityResource = CreateTestIdentityResource("identity_visible");
            var visibleApiResource      = CreateTestApiResource("api_visible", new[] { Guid.NewGuid().ToString() });
            var visibleApiScope         = CreateTestApiScopeForResource("api_visible_scope", new[] { Guid.NewGuid().ToString() });

            visibleApiResource.Scopes.Add(visibleApiScope.Name);
            var hiddenIdentityResource = new IdentityResource()
            {
                Name = "identity_hidden",
                ShowInDiscoveryDocument = false
            };
            var hiddenApiResource = new ApiResource()
            {
                Name   = "api_hidden",
                Scopes = { Guid.NewGuid().ToString() },
                ShowInDiscoveryDocument = false
            };
            var hiddenApiScope = new ApiScope()
            {
                Name = "api_scope_hidden",
                ShowInDiscoveryDocument = false
            };

            using (var session = testDb.OpenSession())
            {
                await session.SaveAsync(visibleIdentityResource.ToEntity());

                await session.SaveAsync(visibleApiResource.ToEntity());

                await session.SaveAsync(visibleApiScope.ToEntity());

                await session.SaveAsync(hiddenIdentityResource.ToEntity());

                await session.SaveAsync(hiddenApiResource.ToEntity());

                await session.SaveAsync(hiddenApiScope.ToEntity());

                await session.FlushAsync();
            }

            var       loggerMock = new Mock <ILogger <ResourceStore> >();
            Resources resources;

            using (var session = testDb.OpenStatelessSession())
            {
                var store = new ResourceStore(session, loggerMock.Object);
                resources = await store.GetAllResourcesAsync();
            }

            resources.Should().NotBeNull();
            resources.IdentityResources.Should().NotBeEmpty();
            resources.IdentityResources.Count.Should().Be(2);
            resources.ApiResources.Should().NotBeEmpty();
            resources.ApiResources.Count.Should().Be(2);
            resources.ApiScopes.Should().NotBeEmpty();
            resources.ApiScopes.Count.Should().Be(2);

            resources.IdentityResources.Any(ir => ir.Name == visibleIdentityResource.Name).Should().BeTrue();
            resources.IdentityResources.Any(ir => ir.Name == hiddenIdentityResource.Name).Should().BeTrue();

            resources.ApiResources.Any(ar => ar.Name == visibleApiResource.Name).Should().BeTrue();
            resources.ApiResources.Any(ar => ar.Name == hiddenApiResource.Name).Should().BeTrue();

            resources.ApiScopes.Any(s => s.Name == visibleApiScope.Name).Should().BeTrue();
            resources.ApiScopes.Any(s => s.Name == hiddenApiScope.Name).Should().BeTrue();

            await CleanupTestDataAsync(testDb);
        }
 public void AddIdentityResource(IdentityResource identityResource)
 {
     _db.IdentityResources.Add(identityResource);
 }
 public static Faker <RegisterIdentityResourceCommand> GenerateRegisterCommand(IdentityResource id = null)
 {
     return(new Faker <RegisterIdentityResourceCommand>().CustomInstantiator(faker =>
                                                                             new RegisterIdentityResourceCommand(IdentityResourceFaker.GenerateIdentiyResource().Generate())));
 }
Ejemplo n.º 8
0
 public static DomainModel.IdentityServer4.IdentityResource ToEntity(this IdentityResource model)
 {
     return(model == null ? null : Mapper.Map <DomainModel.IdentityServer4.IdentityResource>(model));
 }
 public static Faker <UpdateIdentityResourceCommand> GenerateUpdateCommand(IdentityResource id = null, string oldIdentityResourceName = null)
 {
     return(new Faker <UpdateIdentityResourceCommand>().CustomInstantiator(faker =>
                                                                           new UpdateIdentityResourceCommand(IdentityResourceFaker.GenerateIdentiyResource().Generate(), oldIdentityResourceName ?? faker.Internet.DomainName())));
 }
 public async Task AddIdentityResourceAsync(IdentityResource resource)
 {
     await _configurationDbContext.AddIdentityResource(resource.ToEntity());
 }
        public async Task <IActionResult> Edit(long id, IdentityResource idResource)
        {
            var src = await _context.IdentityResources
                      .Include(x => x.UserClaims)
                      .AsNoTracking()
                      .SingleOrDefaultAsync(m => m.Id == id);

            #region Claims
            List <IdentityClaim>
            Claims_Add        = null,
                Claims_Update = null,
                Claims_Delete = null;
            var claims        = DeserializeFormData <IdentityClaim>("UserClaims");
            if (claims.Count > 0)
            {
                Claims_Add    = claims.Where(x => x.Id == 0).ToList();
                Claims_Update = claims.Where(x => x.Id > 0).ToList();
                var Ids = claims.Select(x => x.Id).ToList();
                if (Ids.Count > 0)
                {
                    Claims_Delete = src.UserClaims.Where(x => !Ids.Contains(x.Id)).ToList();
                }
            }
            #endregion

            #region Submit to database
            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(idResource);
                    await _context.SaveChangesAsync();

                    #region Claims
                    if (Claims_Add.Count > 0)
                    {
                        Claims_Add.ForEach(x => x.IdentityResource = idResource);
                        _context.AddRange(Claims_Add);
                        await _context.SaveChangesAsync();
                    }
                    if (Claims_Update.Count > 0)
                    {
                        Claims_Update.ForEach(x => x.IdentityResource = idResource);
                        _context.UpdateRange(Claims_Update);
                        await _context.SaveChangesAsync();
                    }
                    if (Claims_Delete.Count > 0)
                    {
                        Claims_Delete.ForEach(x => x.IdentityResource = null);
                        _context.RemoveRange(Claims_Delete);
                        await _context.SaveChangesAsync();
                    }
                    #endregion
                }

                catch (DbUpdateConcurrencyException)
                {
                    if (!Exists(id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index"));
            }
            #endregion

            return(View(idResource));
        }
Ejemplo n.º 12
0
 public async Task AddIdentityResource(IdentityResource entity)
 {
     await DocumentClient.CreateDocumentAsync(_identityResourcesUri, entity);
 }
Ejemplo n.º 13
0
 public static IdentityResourceDTO ToDTO(this IdentityResource entity)
 {
     return(entity == null ? null : Mapper.Map <IdentityResourceDTO>(entity));
 }