diff --git a/modules/openiddict/Volo.Abp.OpenIddict.sln b/modules/openiddict/Volo.Abp.OpenIddict.sln
index beafc8c518..c95dc5f251 100644
--- a/modules/openiddict/Volo.Abp.OpenIddict.sln
+++ b/modules/openiddict/Volo.Abp.OpenIddict.sln
@@ -37,6 +37,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenIddict.Demo.API", "app\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenIddict.Demo.Client.BlazorWASM", "app\OpenIddict.Demo.Client.BlazorWASM\OpenIddict.Demo.Client.BlazorWASM.csproj", "{F3853F2B-72D4-496C-B59C-87E2759AD79B}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.PermissionManagement.Domain.OpenIddict", "src\Volo.Abp.PermissionManagement.Domain.OpenIddict\Volo.Abp.PermissionManagement.Domain.OpenIddict.csproj", "{674D0A62-4F7B-436C-83A9-AA8FE03F3A11}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -99,6 +101,10 @@ Global
{F3853F2B-72D4-496C-B59C-87E2759AD79B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F3853F2B-72D4-496C-B59C-87E2759AD79B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F3853F2B-72D4-496C-B59C-87E2759AD79B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {674D0A62-4F7B-436C-83A9-AA8FE03F3A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {674D0A62-4F7B-436C-83A9-AA8FE03F3A11}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {674D0A62-4F7B-436C-83A9-AA8FE03F3A11}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {674D0A62-4F7B-436C-83A9-AA8FE03F3A11}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -118,6 +124,7 @@ Global
{1EF0F35E-65BE-4994-9BC4-9D3992A9B05C} = {2B5CD179-FF7B-428F-98F6-2ADBB9538D18}
{70FD6E90-BBE8-4DA1-AE07-55064803225B} = {2B5CD179-FF7B-428F-98F6-2ADBB9538D18}
{F3853F2B-72D4-496C-B59C-87E2759AD79B} = {2B5CD179-FF7B-428F-98F6-2ADBB9538D18}
+ {674D0A62-4F7B-436C-83A9-AA8FE03F3A11} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C09128AF-C73F-ED7D-33F5-69BF7D934D50}
diff --git a/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/FodyWeavers.xml b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/FodyWeavers.xml
new file mode 100644
index 0000000000..bc5a74a236
--- /dev/null
+++ b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/FodyWeavers.xsd b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/FodyWeavers.xsd
new file mode 100644
index 0000000000..3f3946e282
--- /dev/null
+++ b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo.Abp.PermissionManagement.Domain.OpenIddict.csproj b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo.Abp.PermissionManagement.Domain.OpenIddict.csproj
new file mode 100644
index 0000000000..2ba27b4e28
--- /dev/null
+++ b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo.Abp.PermissionManagement.Domain.OpenIddict.csproj
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ netstandard2.0
+ Volo.Abp.PermissionManagement.Domain.OpenIddict
+ Volo.Abp.PermissionManagement.Domain.OpenIddict
+ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
diff --git a/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/AbpPermissionManagementDomainOpenIddictModule.cs b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/AbpPermissionManagementDomainOpenIddictModule.cs
new file mode 100644
index 0000000000..1bf2bf140d
--- /dev/null
+++ b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/AbpPermissionManagementDomainOpenIddictModule.cs
@@ -0,0 +1,21 @@
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Modularity;
+using Volo.Abp.OpenIddict;
+
+namespace Volo.Abp.PermissionManagement.OpenIddict;
+
+[DependsOn(
+ typeof(AbpOpenIddictDomainSharedModule),
+ typeof(AbpPermissionManagementDomainModule)
+)]
+public class AbpPermissionManagementDomainOpenIddictModule : AbpModule
+{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.ManagementProviders.Add();
+ options.ProviderPolicies[ClientPermissionValueProvider.ProviderName] = "OpenIddictPro.Application.ManagePermissions";
+ });
+ }
+}
diff --git a/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationPermissionManagementProvider.cs b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationPermissionManagementProvider.cs
new file mode 100644
index 0000000000..4c4d6fe398
--- /dev/null
+++ b/modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict/Volo/Abp/PermissionManagement/OpenIddict/ApplicationPermissionManagementProvider.cs
@@ -0,0 +1,55 @@
+using System.Threading.Tasks;
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Guids;
+using Volo.Abp.MultiTenancy;
+
+namespace Volo.Abp.PermissionManagement.OpenIddict;
+
+public class ApplicationPermissionManagementProvider : PermissionManagementProvider
+{
+ public override string Name => ClientPermissionValueProvider.ProviderName;
+
+ public ApplicationPermissionManagementProvider(
+ IPermissionGrantRepository permissionGrantRepository,
+ IGuidGenerator guidGenerator,
+ ICurrentTenant currentTenant)
+ : base(
+ permissionGrantRepository,
+ guidGenerator,
+ currentTenant)
+ {
+
+ }
+
+ public override Task CheckAsync(string name, string providerName, string providerKey)
+ {
+ using (CurrentTenant.Change(null))
+ {
+ return base.CheckAsync(name, providerName, providerKey);
+ }
+ }
+
+ protected override Task GrantAsync(string name, string providerKey)
+ {
+ using (CurrentTenant.Change(null))
+ {
+ return base.GrantAsync(name, providerKey);
+ }
+ }
+
+ protected override Task RevokeAsync(string name, string providerKey)
+ {
+ using (CurrentTenant.Change(null))
+ {
+ return base.RevokeAsync(name, providerKey);
+ }
+ }
+
+ public override Task SetAsync(string name, string providerKey, bool isGranted)
+ {
+ using (CurrentTenant.Change(null))
+ {
+ return base.SetAsync(name, providerKey, isGranted);
+ }
+ }
+}
diff --git a/nupkg/common.ps1 b/nupkg/common.ps1
index 48f3cf9114..37f66c7b0e 100644
--- a/nupkg/common.ps1
+++ b/nupkg/common.ps1
@@ -347,6 +347,7 @@ $projects = (
"modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared",
"modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore",
"modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB",
+ "modules/openiddict/src/Volo.Abp.PermissionManagement.Domain.OpenIddict",
# modules/permission-management
"modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts",