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