diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs index 6735cb1fdb..06c4d62c0e 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResource.cs @@ -63,7 +63,8 @@ namespace Volo.Abp.IdentityServer.ApiResources string description = null, bool required = false, bool emphasize = false, - bool showInDiscoveryDocument = true) + bool showInDiscoveryDocument = true, + ApiScopeClaim[] userClaims = null) { Scopes.Add(new ApiScope(Id, name, displayName, description, required, emphasize, showInDiscoveryDocument)); } @@ -77,5 +78,14 @@ namespace Volo.Abp.IdentityServer.ApiResources { UserClaims.Clear(); } + + public virtual void RemoveAllScopes() + { + foreach (var scope in Scopes) + { + scope.RemoveAllUserClaims(); + } + Scopes.Clear(); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScope.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScope.cs index 67fe8c6ad8..f96debb31a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScope.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScope.cs @@ -56,6 +56,11 @@ namespace Volo.Abp.IdentityServer.ApiResources UserClaims.Add(new ApiScopeClaim(ApiResourceId, Name, type)); } + public virtual void RemoveAllUserClaims() + { + UserClaims.Clear(); + } + public override object[] GetKeys() { return new object[] { ApiResourceId, Name }; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs index f09c64eb72..9976f1def2 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs @@ -66,6 +66,44 @@ namespace Volo.Abp.IdentityServer.ApiResources return await DbSet.CountAsync(); } + public override async Task UpdateAsync(ApiResource entity, bool autoSave = false, CancellationToken cancellationToken = default) + { + var scopeClaims = DbContext.Set().Where(sc => sc.ApiResourceId == entity.Id); + + foreach (var scopeClaim in scopeClaims) + { + DbContext.Set().Remove(scopeClaim); + } + + var scopes = DbContext.Set().Where(s => s.ApiResourceId == entity.Id); + + foreach (var scope in scopes) + { + DbContext.Set().Remove(scope); + } + + return await base.UpdateAsync(entity, autoSave, cancellationToken); + } + + public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) + { + var scopeClaims = DbContext.Set().Where(sc => sc.ApiResourceId == id); + + foreach (var scopeClaim in scopeClaims) + { + DbContext.Set().Remove(scopeClaim); + } + + var scopes = DbContext.Set().Where(s => s.ApiResourceId == id); + + foreach (var scope in scopes) + { + DbContext.Set().Remove(scope); + } + + await base.DeleteAsync(id, autoSave, cancellationToken); + } + public override IQueryable WithDetails() { return GetQueryable().IncludeDetails();