From 290e3f36c8a29fd567dd71e16c37eba374458b28 Mon Sep 17 00:00:00 2001 From: colin Date: Wed, 26 Aug 2026 09:19:05 +0800 Subject: [PATCH] feat: Remove duplicate xxxDefinitionManager rewrites --- aspnet-core/LINGYUN.MicroService.All.slnx | 4 + aspnet-core/LINGYUN.MicroService.Aspire.slnx | 4 + .../LINGYUN.MicroService.SingleProject.slnx | 4 + .../AIServiceModule.cs | 2 + .../LINGYUN.Abp.MicroService.AIService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../AdminServiceModule.cs | 2 + ...NGYUN.Abp.MicroService.AdminService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../AuthServerModule.cs | 2 + ...LINGYUN.Abp.MicroService.AuthServer.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../IdentityServiceModule.cs | 2 + ...UN.Abp.MicroService.IdentityService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- ...bp.MicroService.LocalizationService.csproj | 1 + .../LocalizationServiceModule.cs | 2 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- ...YUN.Abp.MicroService.MessageService.csproj | 1 + .../MessageServiceModule.cs | 2 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- ...UN.Abp.MicroService.PlatformService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../PlatformServiceModule.cs | 2 + ...INGYUN.Abp.MicroService.TaskService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../TaskServiceModule.cs | 2 + ...GYUN.Abp.MicroService.WeChatService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../WeChatServiceModule.cs | 2 + ...YUN.Abp.MicroService.WebhookService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../WebhookServiceModule.cs | 2 + ...UN.Abp.MicroService.WorkflowService.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../WorkflowServiceModule.cs | 2 + ...LY.MicroService.Applications.Single.csproj | 1 + .../MicroServiceApplicationsSingleModule.cs | 2 + .../MergeFeatureDefinitionManager.cs | 274 ----------------- .../MergePermissionDefinitionManager.cs | 272 ----------------- .../MergeSettingDefinitionManager.cs | 84 ------ .../MergeTemplateDefinitionManager.cs | 102 ------- .../AuthServerHttpApiHostModule.cs | 2 + ...icroService.AuthServer.HttpApi.Host.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../AuthServerModule.cs | 3 +- .../LY.MicroService.AuthServer.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../BackendAdminHttpApiHostModule.cs | 2 + ...roService.BackendAdmin.HttpApi.Host.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- ...LocalizationManagement.HttpApi.Host.csproj | 1 + ...LocalizationManagementHttpApiHostModule.cs | 2 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- ...ice.PlatformManagement.HttpApi.Host.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../PlatformManagementHttpApiHostModule.cs | 2 + ...ervice.RealtimeMessage.HttpApi.Host.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../RealtimeMessageHttpApiHostModule.cs | 2 + ...Service.TaskManagement.HttpApi.Host.csproj | 12 +- .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../TaskManagementHttpApiHostModule.cs | 2 + ...ice.WebhooksManagement.HttpApi.Host.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../WebhooksManagementHttpApiHostModule.cs | 2 + ...rvice.WechatManagement.HttpApi.Host.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../WechatManagementHttpApiHostModule.cs | 2 + ...ice.WorkflowManagement.HttpApi.Host.csproj | 1 + .../MergeFeatureDefinitionManager.cs | 277 ------------------ .../MergePermissionDefinitionManager.cs | 276 ----------------- .../MergeSettingDefinitionManager.cs | 86 ------ .../MergeTemplateDefinitionManager.cs | 104 ------- .../WorkflowManagementHttpApiHostModule.cs | 2 + 135 files changed, 85 insertions(+), 16340 deletions(-) delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs diff --git a/aspnet-core/LINGYUN.MicroService.All.slnx b/aspnet-core/LINGYUN.MicroService.All.slnx index 88ae80f90..ba443cdec 100644 --- a/aspnet-core/LINGYUN.MicroService.All.slnx +++ b/aspnet-core/LINGYUN.MicroService.All.slnx @@ -146,6 +146,10 @@ + + + + diff --git a/aspnet-core/LINGYUN.MicroService.Aspire.slnx b/aspnet-core/LINGYUN.MicroService.Aspire.slnx index f49cd2dd6..b00ca5382 100644 --- a/aspnet-core/LINGYUN.MicroService.Aspire.slnx +++ b/aspnet-core/LINGYUN.MicroService.Aspire.slnx @@ -129,6 +129,10 @@ + + + + diff --git a/aspnet-core/LINGYUN.MicroService.SingleProject.slnx b/aspnet-core/LINGYUN.MicroService.SingleProject.slnx index 68b68b630..f06a24209 100644 --- a/aspnet-core/LINGYUN.MicroService.SingleProject.slnx +++ b/aspnet-core/LINGYUN.MicroService.SingleProject.slnx @@ -48,6 +48,10 @@ + + + + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.cs index 22b489085..f79ca31ac 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.cs @@ -8,6 +8,7 @@ using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -67,6 +68,7 @@ namespace LINGYUN.Abp.MicroService.AIService; typeof(AbpLocalizationCultureMapModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/LINGYUN.Abp.MicroService.AIService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/LINGYUN.Abp.MicroService.AIService.csproj index 32f03e030..30335f0d9 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/LINGYUN.Abp.MicroService.AIService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/LINGYUN.Abp.MicroService.AIService.csproj @@ -45,6 +45,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs index e3a4d08aa..f2b32418c 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs @@ -9,6 +9,7 @@ using LINGYUN.Abp.CachingManagement.StackExchangeRedis; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.DataProtectionManagement; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -98,6 +99,7 @@ namespace LINGYUN.Abp.MicroService.AdminService; typeof(AbpLocalizationCultureMapModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj index 821e59f73..d70d63fba 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj @@ -46,6 +46,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs index f91aea66c..99e2cf8c0 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs @@ -7,6 +7,7 @@ using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.Exporter.MiniSoftware; @@ -74,6 +75,7 @@ namespace LINGYUN.Abp.MicroService.AuthServer; typeof(AbpAspNetCoreMultiTenancyModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpExporterMiniSoftwareModule), typeof(AbpEmailingPlatformModule), diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj index e6fa3dfda..874fd1b04 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj @@ -42,6 +42,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs index 697976eac..d26bce271 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs @@ -5,6 +5,7 @@ using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -81,6 +82,7 @@ namespace LINGYUN.Abp.MicroService.IdentityService; typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAspNetCoreHttpOverridesModule), typeof(AbpAspNetCoreMvcWrapperModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpExporterMiniSoftwareModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj index 2e4b4dd64..3e48b7a45 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj @@ -48,6 +48,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LINGYUN.Abp.MicroService.LocalizationService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LINGYUN.Abp.MicroService.LocalizationService.csproj index 47841785d..4e9db5189 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LINGYUN.Abp.MicroService.LocalizationService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LINGYUN.Abp.MicroService.LocalizationService.csproj @@ -42,6 +42,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.cs index 57775d94d..9c281e19c 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.cs @@ -4,6 +4,7 @@ using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.Identity.Session.AspNetCore; @@ -57,6 +58,7 @@ namespace LINGYUN.Abp.MicroService.LocalizationService; typeof(AbpEmailingPlatformModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/LINGYUN.Abp.MicroService.MessageService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/LINGYUN.Abp.MicroService.MessageService.csproj index 278615940..a60e6da90 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/LINGYUN.Abp.MicroService.MessageService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/LINGYUN.Abp.MicroService.MessageService.csproj @@ -45,6 +45,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.cs index 553806c7f..7c22d3376 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.cs @@ -6,6 +6,7 @@ using LINGYUN.Abp.BackgroundTasks.DistributedLocking; using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Notifications; @@ -118,6 +119,7 @@ namespace LINGYUN.Abp.MicroService.MessageService; typeof(AbpClaimsMappingModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj index 534783bde..4519d7e06 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj @@ -49,6 +49,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs index 8cfdadd60..549c19f9b 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs @@ -11,6 +11,7 @@ using LINGYUN.Abp.BlobManagement.Tencent; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Features.LimitValidation.Redis; @@ -95,6 +96,7 @@ namespace LINGYUN.Abp.MicroService.PlatformService; typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpClaimsMappingModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj index 9cf70539f..4d8cf5679 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj @@ -45,6 +45,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs index c9ce2e0ff..63d2a79fd 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs @@ -9,6 +9,7 @@ using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Elasticsearch.Jobs; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; @@ -83,6 +84,7 @@ namespace LINGYUN.Abp.MicroService.TaskService; typeof(AbpLocalizationCultureMapModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpClaimsMappingModule), typeof(AbpCAPEventBusModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/LINGYUN.Abp.MicroService.WeChatService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/LINGYUN.Abp.MicroService.WeChatService.csproj index 67df88e96..dd35cd959 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/LINGYUN.Abp.MicroService.WeChatService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/LINGYUN.Abp.MicroService.WeChatService.csproj @@ -46,6 +46,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.cs index 172e0fa57..2f07ff509 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.cs @@ -3,6 +3,7 @@ using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.Claims.Mapping; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Http.Client.Wrapper; @@ -79,6 +80,7 @@ namespace LINGYUN.Abp.MicroService.WeChatService; typeof(AbpClaimsMappingModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/LINGYUN.Abp.MicroService.WebhookService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/LINGYUN.Abp.MicroService.WebhookService.csproj index b7c147c12..954443798 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/LINGYUN.Abp.MicroService.WebhookService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/LINGYUN.Abp.MicroService.WebhookService.csproj @@ -41,6 +41,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.cs index 581a35fae..eaeb56588 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.cs @@ -6,6 +6,7 @@ using LINGYUN.Abp.BackgroundTasks.DistributedLocking; using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Dapr.Client.Wrapper; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -62,6 +63,7 @@ namespace LINGYUN.Abp.MicroService.WebhookService; typeof(AbpSmsPlatformModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj index 6a8af9143..df5920d1a 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj @@ -52,6 +52,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs index 830665db6..dc23b98f5 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs @@ -7,6 +7,7 @@ using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Elsa; using LINGYUN.Abp.Elsa.Activities; using LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql; @@ -84,6 +85,7 @@ namespace LINGYUN.Abp.MicroService.WorkflowService; typeof(AbpClaimsMappingModule), typeof(AbpAspNetCoreMvcNewtonsoftModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj index 41a8398ab..d8162eedb 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj +++ b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj @@ -88,6 +88,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs index 98f7a4524..f4d6e2e0d 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs @@ -1,4 +1,5 @@ using LINGYUN.Abp.BlobManagement.MimeCheck; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Identity.AspNetCore; using LINGYUN.Abp.Identity.Jobs; using LINGYUN.Abp.Logging.Serilog.Elasticsearch; @@ -408,6 +409,7 @@ namespace LY.MicroService.Applications.Single; typeof(AbpAspNetCoreHttpOverridesModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpAspNetCoreMvcUiMultiTenancyModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpSwashbuckleModule), typeof(AbpMailKitModule), typeof(AbpAutofacModule), diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 276ca1889..000000000 --- a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,274 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Immutable; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 007bbe01f..000000000 --- a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,272 +0,0 @@ -using System.Collections.Immutable; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index f4269d56e..000000000 --- a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections.Immutable; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 03a2c2f0d..000000000 --- a/aspnet-core/services/LY.MicroService.Applications.Single/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System.Collections.Immutable; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs index 7162da4ef..784ca039b 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs @@ -5,6 +5,7 @@ using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.EventBus.CAP; @@ -81,6 +82,7 @@ namespace LY.MicroService.AuthServer; typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpTelemetryOpenTelemetryModule), typeof(AbpTelemetrySkyWalkingModule), diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj index b1841e797..6288562b5 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj @@ -48,6 +48,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs index b0eb45961..0f6e35750 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs @@ -7,6 +7,7 @@ using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.Exporter.MiniSoftware; @@ -28,7 +29,6 @@ using LINGYUN.Abp.Serilog.Enrichers.UniqueId; using LINGYUN.Abp.Sms.Platform; using LINGYUN.Abp.Telemetry.OpenTelemetry; using LINGYUN.Abp.Telemetry.SkyWalking; -using LINGYUN.Platform.EntityFrameworkCore; using LY.MicroService.AuthServer.EntityFrameworkCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -78,6 +78,7 @@ namespace LY.MicroService.AuthServer; typeof(AbpAspNetCoreMultiTenancyModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpTelemetryOpenTelemetryModule), typeof(AbpTelemetrySkyWalkingModule), diff --git a/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj b/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj index f3b2708a7..8fe2eca9a 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj +++ b/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj @@ -47,6 +47,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs index 0082e1eea..9788fc44a 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs @@ -9,6 +9,7 @@ using LINGYUN.Abp.CachingManagement.StackExchangeRedis; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.DataProtectionManagement; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -123,6 +124,7 @@ namespace LY.MicroService.BackendAdmin; typeof(AbpLocalizationCultureMapModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj index 4d2d1ef5b..43847c52d 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj @@ -52,6 +52,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LY.MicroService.LocalizationManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LY.MicroService.LocalizationManagement.HttpApi.Host.csproj index d2d221c06..0ee5c1e64 100644 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LY.MicroService.LocalizationManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LY.MicroService.LocalizationManagement.HttpApi.Host.csproj @@ -43,6 +43,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs index 42a571c24..c6a713e39 100644 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs @@ -4,6 +4,7 @@ using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -65,6 +66,7 @@ namespace LY.MicroService.LocalizationManagement; typeof(AbpEmailingPlatformModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj index 37afc9c3c..91f1f2bf3 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj @@ -50,6 +50,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs index bc94f3a97..6f168a4f9 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs @@ -12,6 +12,7 @@ using LINGYUN.Abp.BlobManagement.Tencent; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Features.LimitValidation.Redis; @@ -110,6 +111,7 @@ namespace LY.MicroService.PlatformManagement; typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpClaimsMappingModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj index 81e194097..26d2502c3 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj @@ -50,6 +50,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs index 13cee7f30..c1deb04c3 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs @@ -6,6 +6,7 @@ using LINGYUN.Abp.BackgroundTasks.DistributedLocking; using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Notifications; @@ -125,6 +126,7 @@ namespace LY.MicroService.RealtimeMessage; typeof(AbpTelemetrySkyWalkingModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj index 13cafbe15..0a7da1a61 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj @@ -7,6 +7,13 @@ LY.MicroService.TaskManagement + + + + + + + @@ -44,6 +51,7 @@ + @@ -77,8 +85,4 @@ - - - - diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs index 42b73945b..58f216176 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs @@ -9,6 +9,7 @@ using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Elasticsearch.Jobs; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; @@ -88,6 +89,7 @@ namespace LY.MicroService.TaskManagement; typeof(AbpLocalizationCultureMapModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpTelemetryOpenTelemetryModule), typeof(AbpTelemetrySkyWalkingModule), typeof(AbpClaimsMappingModule), diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj index e5babebad..c013775fe 100644 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/LY.MicroService.WebhooksManagement.HttpApi.Host.csproj @@ -43,6 +43,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs index c650f4247..c129bce1a 100644 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.cs @@ -6,6 +6,7 @@ using LINGYUN.Abp.BackgroundTasks.DistributedLocking; using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Dapr.Client.Wrapper; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -85,6 +86,7 @@ namespace LY.MicroService.WebhooksManagement; typeof(AbpTelemetrySkyWalkingModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj index 7e506c867..9600daaa7 100644 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj @@ -44,6 +44,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs index 488c26fd9..695de72fe 100644 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs @@ -3,6 +3,7 @@ using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.Claims.Mapping; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; @@ -83,6 +84,7 @@ namespace LY.MicroService.WechatManagement; typeof(AbpTelemetrySkyWalkingModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAutofacModule) )] diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj index 49d3ab7ca..1d9180042 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj @@ -53,6 +53,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs deleted file mode 100644 index 498ac24fe..000000000 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeFeatureDefinitionManager.cs +++ /dev/null @@ -1,277 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Features; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeFeatureDefinitionManager : FeatureDefinitionManager -{ - public MergeFeatureDefinitionManager( - IStaticFeatureDefinitionStore staticStore, - IDynamicFeatureDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeFeatureMetadata(staticDefinition, dynamicDefinition); - - foreach (var child in dynamicDefinition.Children) - { - MergeChildFeature(staticDefinition, child); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticFeatures = await StaticStore.GetFeaturesAsync(); - var dynamicFeatures = await DynamicStore.GetFeaturesAsync(); - - var mergedFeatures = new Dictionary(); - - foreach (var staticFeature in staticFeatures) - { - mergedFeatures[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicFeature in dynamicFeatures) - { - if (mergedFeatures.TryGetValue(dynamicFeature.Name, out var existingFeature)) - { - MergeFeatureMetadata(existingFeature, dynamicFeature); - - foreach (var child in dynamicFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - else - { - mergedFeatures[dynamicFeature.Name] = dynamicFeature; - } - } - - return mergedFeatures.Values.ToImmutableList(); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await StaticStore.GetGroupsAsync(); - var dynamicGroups = await DynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupFeatures(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupFeatures(FeatureGroupDefinition target, FeatureGroupDefinition source) - { - foreach (var sourceFeature in source.Features) - { - var existingFeature = GetFeatureOrNull(target, sourceFeature.Name); - - if (existingFeature == null) - { - var newFeature = target.AddFeature( - sourceFeature.Name, - sourceFeature.DefaultValue, - sourceFeature.DisplayName, - sourceFeature.Description, - sourceFeature.ValueType, - sourceFeature.IsVisibleToClients, - sourceFeature.IsAvailableToHost - ); - - CopyFeatureDetails(sourceFeature, newFeature); - - foreach (var child in sourceFeature.Children) - { - AddChildFeatureRecursively(newFeature, child); - } - } - else - { - MergeFeatureMetadata(existingFeature, sourceFeature); - - foreach (var child in sourceFeature.Children) - { - MergeChildFeature(existingFeature, child); - } - } - } - } - - private static void AddChildFeatureRecursively(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - - private static void MergeChildFeature(FeatureDefinition parent, FeatureDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.CreateChild( - sourceChild.Name, - sourceChild.DefaultValue, - sourceChild.DisplayName, - sourceChild.Description, - sourceChild.ValueType, - sourceChild.IsVisibleToClients, - sourceChild.IsAvailableToHost - ); - CopyFeatureDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildFeatureRecursively(newChild, grandchild); - } - } - else - { - MergeFeatureMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildFeature(existingChild, grandchild); - } - } - } - - private static void CopyFeatureDetails(FeatureDefinition source, FeatureDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - } - - private static void MergeFeatureMetadata(FeatureDefinition target, FeatureDefinition source) - { - if (source.DisplayName != null) - { - target.DisplayName = source.DisplayName; - } - - if (source.Description != null) - { - target.Description = source.Description; - } - - if (source.DefaultValue != null) - { - target.DefaultValue = source.DefaultValue; - } - - if (source.ValueType != null) - { - target.ValueType = source.ValueType; - } - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.AllowedProviders) - { - if (!target.AllowedProviders.Contains(provider)) - { - target.AllowedProviders.Add(provider); - } - } - - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsAvailableToHost = target.IsAvailableToHost || source.IsAvailableToHost; - } - - - public static FeatureDefinition? GetFeatureOrNull( - FeatureGroupDefinition group, - [NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - return GetFeatureOrNullRecursively(group.Features, name); - } - - private static FeatureDefinition? GetFeatureOrNullRecursively( - IReadOnlyList features, - string name) - { - foreach (var feature in features) - { - if (feature.Name == name) - { - return feature; - } - - var childFeature = GetFeatureOrNullRecursively(feature.Children, name); - if (childFeature != null) - { - return childFeature; - } - } - - return null; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs deleted file mode 100644 index 027e7f1c4..000000000 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergePermissionDefinitionManager.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Authorization.Permissions; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergePermissionDefinitionManager : PermissionDefinitionManager -{ - private readonly IStaticPermissionDefinitionStore _staticStore; - private readonly IDynamicPermissionDefinitionStore _dynamicStore; - - public MergePermissionDefinitionManager( - IStaticPermissionDefinitionStore staticStore, - IDynamicPermissionDefinitionStore dynamicStore) : base(staticStore, dynamicStore) - { - _staticStore = staticStore; - _dynamicStore = dynamicStore; - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetOrNullAsync(name); - var dynamicDefinition = await _dynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task GetResourcePermissionOrNullAsync(string resourceName, string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await _staticStore.GetResourcePermissionOrNullAsync(resourceName, name); - var dynamicDefinition = await _dynamicStore.GetResourcePermissionOrNullAsync(resourceName, name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergePermissionMetadata(staticDefinition, dynamicDefinition); - - foreach (var grandchild in dynamicDefinition.Children) - { - MergeChildPermissions(staticDefinition, grandchild); - } - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetPermissionsAsync() - { - var staticPermissions = await _staticStore.GetPermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetPermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetResourcePermissionsAsync() - { - var staticPermissions = await _staticStore.GetResourcePermissionsAsync(); - var dynamicPermissions = await _dynamicStore.GetResourcePermissionsAsync(); - - return MergePermissions(staticPermissions, dynamicPermissions); - } - - public async override Task> GetGroupsAsync() - { - var staticGroups = await _staticStore.GetGroupsAsync(); - var dynamicGroups = await _dynamicStore.GetGroupsAsync(); - - var mergedGroups = new Dictionary(); - - foreach (var staticGroup in staticGroups) - { - mergedGroups[staticGroup.Name] = staticGroup; - } - - foreach (var dynamicGroup in dynamicGroups) - { - if (mergedGroups.TryGetValue(dynamicGroup.Name, out var existingGroup)) - { - MergeGroupPermissions(existingGroup, dynamicGroup); - } - else - { - mergedGroups[dynamicGroup.Name] = dynamicGroup; - } - } - - return mergedGroups.Values.ToImmutableList(); - } - - private static void MergeGroupPermissions(PermissionGroupDefinition target, PermissionGroupDefinition source) - { - foreach (var sourcePermission in source.Permissions) - { - var existingPermission = target.GetPermissionOrNull(sourcePermission.Name); - - if (existingPermission == null) - { - var newPermission = target.AddPermission( - sourcePermission.Name, - sourcePermission.DisplayName, - sourcePermission.MultiTenancySide, - sourcePermission.IsEnabled - ); - - CopyPermissionDetails(sourcePermission, newPermission); - - foreach (var child in sourcePermission.Children) - { - AddChildPermissionRecursively(newPermission, child); - } - } - else - { - MergePermissionMetadata(existingPermission, sourcePermission); - - foreach (var sourceChild in sourcePermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - } - } - - private static void AddChildPermissionRecursively(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - - private static IReadOnlyList MergePermissions(IReadOnlyList staticPermissions, IReadOnlyList dynamicPermissions) - { - var mergedPermissions = new Dictionary(); - - foreach (var staticFeature in staticPermissions) - { - mergedPermissions[staticFeature.Name] = staticFeature; - } - - foreach (var dynamicPermission in dynamicPermissions) - { - if (mergedPermissions.TryGetValue(dynamicPermission.Name, out var existingPermission)) - { - MergePermissionMetadata(existingPermission, dynamicPermission); - - foreach (var sourceChild in dynamicPermission.Children) - { - MergeChildPermissions(existingPermission, sourceChild); - } - } - else - { - mergedPermissions[dynamicPermission.Name] = dynamicPermission; - } - } - - return mergedPermissions.Values.ToImmutableList(); - } - - private static void MergeChildPermissions(PermissionDefinition parent, PermissionDefinition sourceChild) - { - var existingChild = parent.Children.FirstOrDefault(c => c.Name == sourceChild.Name); - - if (existingChild == null) - { - var newChild = parent.AddChild( - sourceChild.Name, - sourceChild.DisplayName, - sourceChild.MultiTenancySide, - sourceChild.IsEnabled - ); - CopyPermissionDetails(sourceChild, newChild); - - foreach (var grandchild in sourceChild.Children) - { - AddChildPermissionRecursively(newChild, grandchild); - } - } - else - { - MergePermissionMetadata(existingChild, sourceChild); - - foreach (var grandchild in sourceChild.Children) - { - MergeChildPermissions(existingChild, grandchild); - } - } - } - - private static void CopyPermissionDetails(PermissionDefinition source, PermissionDefinition target) - { - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - } - - private static void MergePermissionMetadata(PermissionDefinition target, PermissionDefinition source) - { - target.DisplayName = source.DisplayName; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - - foreach (var checker in source.StateCheckers) - { - if (!target.StateCheckers.Contains(checker)) - { - target.StateCheckers.Add(checker); - } - } - - if (source.MultiTenancySide != MultiTenancySides.Both) - { - target.MultiTenancySide |= source.MultiTenancySide; - } - - target.IsEnabled = target.IsEnabled || source.IsEnabled; - } -} -#nullable disable \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs deleted file mode 100644 index 2fe64a566..000000000 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeSettingDefinitionManager.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.Settings; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeSettingDefinitionManager : SettingDefinitionManager -{ - public MergeSettingDefinitionManager( - IStaticSettingDefinitionStore staticStore, - IDynamicSettingDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeSetting(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticSettings = await StaticStore.GetAllAsync(); - var dynamicSettings = await DynamicStore.GetAllAsync(); - - var mergedSettings = new Dictionary(); - - foreach (var staticSetting in staticSettings) - { - mergedSettings[staticSetting.Name] = staticSetting; - } - - foreach (var dynamicSetting in dynamicSettings) - { - if (mergedSettings.TryGetValue(dynamicSetting.Name, out var existingSetting)) - { - MergeSetting(existingSetting, dynamicSetting); - } - else - { - mergedSettings[dynamicSetting.Name] = dynamicSetting; - } - } - - return mergedSettings.Values.ToImmutableList(); - } - - private static void MergeSetting(SettingDefinition target, SettingDefinition source) - { - target.DisplayName = source.DisplayName; - target.Description = source.Description ?? target.Description; - target.DefaultValue = source.DefaultValue ?? target.DefaultValue; - target.IsVisibleToClients = target.IsVisibleToClients || source.IsVisibleToClients; - target.IsInherited = target.IsInherited || source.IsInherited; - target.IsEncrypted = target.IsEncrypted || source.IsEncrypted; - - foreach (var property in source.Properties) - { - target.Properties[property.Key] = property.Value; - } - - foreach (var provider in source.Providers) - { - if (!target.Providers.Contains(provider)) - { - target.Providers.Add(provider); - } - } - } -} -#nullable disable - diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs deleted file mode 100644 index 5cb3137cd..000000000 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/Overrides/MergeTemplateDefinitionManager.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating; - -namespace Volo.Abp.TextTemplatin; - -#nullable enable - -[Dependency(ReplaceServices = true)] -public class MergeTemplateDefinitionManager : TemplateDefinitionManager -{ - public MergeTemplateDefinitionManager( - IStaticTemplateDefinitionStore staticStore, - IDynamicTemplateDefinitionStore dynamicStore) - : base(staticStore, dynamicStore) - { - } - - public async override Task GetOrNullAsync(string name) - { - Check.NotNull(name, nameof(name)); - - var staticDefinition = await StaticStore.GetOrNullAsync(name); - var dynamicDefinition = await DynamicStore.GetOrNullAsync(name); - - if (staticDefinition != null && dynamicDefinition != null) - { - MergeTemplate(staticDefinition, dynamicDefinition); - } - - return staticDefinition ?? dynamicDefinition; - } - - public async override Task> GetAllAsync() - { - var staticTemplates = await StaticStore.GetAllAsync(); - var dynamicTemplates = await DynamicStore.GetAllAsync(); - - var mergedTemplates = new Dictionary(); - - foreach (var staticTemplate in staticTemplates) - { - mergedTemplates[staticTemplate.Name] = staticTemplate; - } - - foreach (var dynamicTemplate in dynamicTemplates) - { - if (mergedTemplates.TryGetValue(dynamicTemplate.Name, out var existingTemplate)) - { - MergeTemplate(existingTemplate, dynamicTemplate); - } - else - { - mergedTemplates[dynamicTemplate.Name] = dynamicTemplate; - } - } - - return mergedTemplates.Values.ToImmutableList(); - } - - private static TemplateDefinition MergeTemplate(TemplateDefinition staticTemplate, TemplateDefinition dynamicTemplate) - { - var localizationResourceName = dynamicTemplate.LocalizationResourceName ?? staticTemplate.LocalizationResourceName; - var defaultCultureName = dynamicTemplate.DefaultCultureName ?? staticTemplate.DefaultCultureName; - var displayName = dynamicTemplate.DisplayName ?? staticTemplate.DisplayName; - var isLayout = dynamicTemplate.IsLayout || staticTemplate.IsLayout; - var layout = dynamicTemplate.Layout ?? staticTemplate.Layout; - - var mergedTemplate = new TemplateDefinition( - staticTemplate.Name, - localizationResourceName, - displayName, - isLayout, - layout, - defaultCultureName - ); - - foreach (var property in staticTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - foreach (var property in dynamicTemplate.Properties) - { - mergedTemplate.Properties[property.Key] = property.Value; - } - - if (!string.IsNullOrEmpty(dynamicTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = dynamicTemplate.RenderEngine; - } - else if (!string.IsNullOrEmpty(staticTemplate.RenderEngine)) - { - mergedTemplate.RenderEngine = staticTemplate.RenderEngine; - } - - mergedTemplate.IsInlineLocalized = dynamicTemplate.IsInlineLocalized || staticTemplate.IsInlineLocalized; - - return mergedTemplate; - } -} -#nullable disable diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs index 5f3194e9d..b315946a3 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs @@ -7,6 +7,7 @@ using LINGYUN.Abp.BackgroundTasks.Quartz; using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.Dynamic.Definitions; using LINGYUN.Abp.Elsa; using LINGYUN.Abp.Elsa.Activities; using LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql; @@ -87,6 +88,7 @@ namespace LY.MicroService.WorkflowManagement; typeof(AbpTelemetrySkyWalkingModule), typeof(AbpAspNetCoreMvcNewtonsoftModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpDynamicDefinitionsModule), typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAutofacModule) )]