From f5d6a187649a3ee80aa7d4d14d529c7ef67e5a3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Chalet?= Date: Wed, 10 Sep 2025 18:25:29 +0200 Subject: [PATCH] Add new AddGrantTypePermissions()/RemoveGrantTypePermissions() APIs in OpenIddictApplicationDescriptor --- .../OpenIddictApplicationDescriptor.cs | 42 ++++++++++++++++ .../OpenIddictApplicationDescriptorTests.cs | 49 +++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/src/OpenIddict.Abstractions/Descriptors/OpenIddictApplicationDescriptor.cs b/src/OpenIddict.Abstractions/Descriptors/OpenIddictApplicationDescriptor.cs index 741002e1..114b0878 100644 --- a/src/OpenIddict.Abstractions/Descriptors/OpenIddictApplicationDescriptor.cs +++ b/src/OpenIddict.Abstractions/Descriptors/OpenIddictApplicationDescriptor.cs @@ -102,6 +102,27 @@ public class OpenIddictApplicationDescriptor return this; } + /// + /// Adds grant type permissions for all the specified . + /// + /// The grant types for which grant types permissions will be added. + /// The instance. + /// is . + public OpenIddictApplicationDescriptor AddGrantTypePermissions(params string[] types) + { + if (types is null) + { + throw new ArgumentNullException(nameof(types)); + } + + foreach (var type in types) + { + Permissions.Add(OpenIddictConstants.Permissions.Prefixes.GrantType + type); + } + + return this; + } + /// /// Adds resource permissions for all the specified . /// @@ -333,6 +354,27 @@ public class OpenIddictApplicationDescriptor return this; } + /// + /// Removes all the grant type permissions corresponding to the specified . + /// + /// The grant types for which grant types permissions will be removed. + /// The instance. + /// is . + public OpenIddictApplicationDescriptor RemoveGrantTypePermissions(params string[] types) + { + if (types is null) + { + throw new ArgumentNullException(nameof(types)); + } + + foreach (var type in types) + { + Permissions.Remove(OpenIddictConstants.Permissions.Prefixes.GrantType + type); + } + + return this; + } + /// /// Removes all the resource permissions corresponding to the specified . /// diff --git a/test/OpenIddict.Abstractions.Tests/Descriptors/OpenIddictApplicationDescriptorTests.cs b/test/OpenIddict.Abstractions.Tests/Descriptors/OpenIddictApplicationDescriptorTests.cs index f29e9e6d..1f877100 100644 --- a/test/OpenIddict.Abstractions.Tests/Descriptors/OpenIddictApplicationDescriptorTests.cs +++ b/test/OpenIddict.Abstractions.Tests/Descriptors/OpenIddictApplicationDescriptorTests.cs @@ -29,6 +29,30 @@ public class OpenIddictApplicationDescriptorTests Assert.Throws(() => descriptor.AddAudiencePermissions(null!)); } + [Fact] + public void AddGrantTypePermissions_AddsPermissions() + { + // Arrange + var descriptor = new OpenIddictApplicationDescriptor(); + + // Act + descriptor.AddGrantTypePermissions(GrantTypes.Implicit, "custom_grant_type"); + + // Assert + Assert.Contains(OpenIddictConstants.Permissions.Prefixes.GrantType + GrantTypes.Implicit, descriptor.Permissions); + Assert.Contains(OpenIddictConstants.Permissions.Prefixes.GrantType + "custom_grant_type", descriptor.Permissions); + } + + [Fact] + public void AddGrantTypePermissions_ThrowsAnExceptionForNullGrantTypes() + { + // Arrange + var descriptor = new OpenIddictApplicationDescriptor(); + + // Act and assert + Assert.Throws(() => descriptor.AddGrantTypePermissions(null!)); + } + [Fact] public void AddResourcePermissions_AddsPermissions() { @@ -270,6 +294,31 @@ public class OpenIddictApplicationDescriptorTests Assert.Throws(() => descriptor.RemoveAudiencePermissions(null!)); } + [Fact] + public void RemoveGrantTypePermissions_RemovesPermissions() + { + // Arrange + var descriptor = new OpenIddictApplicationDescriptor(); + descriptor.AddGrantTypePermissions(GrantTypes.Implicit, "custom_grant_type"); + + // Act + descriptor.RemoveGrantTypePermissions(GrantTypes.Implicit); + + // Assert + Assert.DoesNotContain(GrantTypes.Implicit, descriptor.Permissions); + Assert.Contains(OpenIddictConstants.Permissions.Prefixes.GrantType + "custom_grant_type", descriptor.Permissions); + } + + [Fact] + public void RemoveGrantTypePermissions_ThrowsAnExceptionForNullGrantTypes() + { + // Arrange + var descriptor = new OpenIddictApplicationDescriptor(); + + // Act and assert + Assert.Throws(() => descriptor.RemoveGrantTypePermissions(null!)); + } + [Fact] public void RemoveResourcePermissions_RemovesPermissions() {