diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs index d24d7e31c9..51862d7597 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs @@ -61,14 +61,14 @@ public class ResourceStore : IResourceStore /// public virtual async Task> FindIdentityResourcesByScopeNameAsync(IEnumerable scopeNames) { - return await GetCacheItemsAsync( + return (await GetCacheItemsAsync( IdentityResourceCache, scopeNames, async keys => await IdentityResourceRepository.GetListByScopeNameAsync(keys, includeDetails: true), (models, cacheKeyPrefix) => new List>> { models.Select(x => new KeyValuePair(AddCachePrefix(x.Name, cacheKeyPrefix), x)) - }); + })).DistinctBy(x => x.Name); } /// @@ -76,14 +76,14 @@ public class ResourceStore : IResourceStore /// public virtual async Task> FindApiScopesByNameAsync(IEnumerable scopeNames) { - return await GetCacheItemsAsync( + return (await GetCacheItemsAsync( ApiScopeCache, scopeNames, async keys => await ApiScopeRepository.GetListByNameAsync(keys, includeDetails: true), (models, cacheKeyPrefix) => new List>> { models.Select(x => new KeyValuePair(AddCachePrefix(x.Name, cacheKeyPrefix), x)) - }); + })).DistinctBy(x => x.Name); } /// @@ -91,7 +91,7 @@ public class ResourceStore : IResourceStore /// public virtual async Task> FindApiResourcesByScopeNameAsync(IEnumerable scopeNames) { - return await GetCacheItemsAsync( + return (await GetCacheItemsAsync( ApiResourceCache, scopeNames, async keys => await ApiResourceRepository.GetListByScopesAsync(keys, includeDetails: true), @@ -100,7 +100,7 @@ public class ResourceStore : IResourceStore return models .Select(model => model.Scopes.Select(scope => new KeyValuePair(AddCachePrefix(scope, cacheKeyPrefix), model)).ToList()) .Where(scopes => scopes.Any()).Cast>>().ToList(); - }, ApiResourceScopeNameCacheKeyPrefix); + }, ApiResourceScopeNameCacheKeyPrefix)).DistinctBy(x => x.Name); } /// @@ -108,14 +108,14 @@ public class ResourceStore : IResourceStore /// public virtual async Task> FindApiResourcesByNameAsync(IEnumerable apiResourceNames) { - return await GetCacheItemsAsync( + return (await GetCacheItemsAsync( ApiResourceCache, apiResourceNames, async keys => await ApiResourceRepository.FindByNameAsync(keys, includeDetails: true), (models, cacheKeyPrefix) => new List>> { models.Select(x => new KeyValuePair(AddCachePrefix(x.Name, cacheKeyPrefix), x)) - }, ApiResourceNameCacheKeyPrefix); + }, ApiResourceNameCacheKeyPrefix)).DistinctBy(x => x.Name); } /// diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs index 7d946b012c..c54c99e88d 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -53,7 +53,7 @@ public class IdentityResourceStore_Tests : AbpIdentityServerTestBase //Assert apiResources.ShouldNotBe(null); - apiResources[0].Scopes.Count.ShouldBe(3); + apiResources[0].Scopes.Count.ShouldBe(4); } [Fact] diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/ResourceStore_Cache_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/ResourceStore_Cache_Tests.cs index dbc77425af..b33b8aa580 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/ResourceStore_Cache_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/ResourceStore_Cache_Tests.cs @@ -54,7 +54,7 @@ public class ResourceStore_Cache_Tests : AbpIdentityServerDomainTestBase apiResources1.Count.ShouldBe(1); apiResources1.First().Name.ShouldBe("Test-ApiResource-Name-1"); - var apiResources2 = (await _resourceStore.FindApiResourcesByScopeNameAsync(new[] { "Test-ApiResource-ApiScope-Name-1", nameof(ApiResourceScope.Scope) })).ToList(); + var apiResources2 = (await _resourceStore.FindApiResourcesByScopeNameAsync(new[] { "Test-ApiResource-ApiScope-Name-1", "Test-ApiResource-ApiScope-Name-2", nameof(ApiResourceScope.Scope) })).ToList(); apiResources2.ShouldNotBeEmpty(); apiResources2.Count.ShouldBe(2); apiResources2.ShouldContain(x => x.Name == "Test-ApiResource-Name-1"); diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 64c6f09209..eaf8aabf58 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -103,6 +103,7 @@ public class AbpIdentityServerTestDataBuilder : ITransientDependency apiResource2.AddSecret("secret".Sha256()); apiResource2.AddScope("Test-ApiResource-ApiScope-Name-1"); + apiResource2.AddScope("Test-ApiResource-ApiScope-Name-2"); apiResource2.AddScope("Test-ApiResource-ApiScope-DisplayName-1"); apiResource2.AddUserClaim("Test-ApiResource-Claim-Type-1");