diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj index 9a9ce24d6d..57f909667b 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj +++ b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj @@ -20,6 +20,7 @@ + diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs index 838050c067..84b609b99f 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Application.Services; using Volo.Abp.Authorization; using Volo.Abp.Domain; @@ -8,17 +7,21 @@ using Volo.Abp.Http.Modeling; using Volo.Abp.Modularity; using Volo.Abp.ObjectMapping; using Volo.Abp.Security; +using Volo.Abp.Settings; using Volo.Abp.Uow; using Volo.Abp.Validation; namespace Volo.Abp.Application { - [DependsOn(typeof(AbpDddDomainModule))] - [DependsOn(typeof(AbpSecurityModule))] - [DependsOn(typeof(AbpObjectMappingModule))] - [DependsOn(typeof(AbpValidationModule))] - [DependsOn(typeof(AbpAuthorizationModule))] - [DependsOn(typeof(AbpHttpAbstractionsModule))] + [DependsOn( + typeof(AbpDddDomainModule), + typeof(AbpSecurityModule), + typeof(AbpObjectMappingModule), + typeof(AbpValidationModule), + typeof(AbpAuthorizationModule), + typeof(AbpHttpAbstractionsModule), + typeof(AbpSettingsModule) + )] public class AbpDddApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj index d4aab94125..05291caa45 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj @@ -17,7 +17,6 @@ - diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs index c695a84664..58de6cdb99 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs @@ -1,21 +1,13 @@ using Volo.Abp.Data; using Volo.Abp.Modularity; -using Volo.Abp.Settings; namespace Volo.Abp.MultiTenancy { [DependsOn( - typeof(AbpDataModule), - typeof(AbpSettingsModule) + typeof(AbpDataModule) )] public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule? { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.ValueProviders.Add(); - }); - } + } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs deleted file mode 100644 index 542af56fe2..0000000000 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Settings; - -namespace Volo.Abp.MultiTenancy -{ - public class TenantSettingValueProvider : SettingValueProvider - { - public const string ProviderName = "Tenant"; - - public override string Name => ProviderName; - - protected ICurrentTenant CurrentTenant { get; } - - public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant) - : base(settingStore) - { - CurrentTenant = currentTenant; - } - - public override async Task GetOrNullAsync(SettingDefinition setting, string providerKey) - { - return await SettingStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - return SettingStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)); - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - return SettingStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - private string NormalizeProviderKey(string providerKey) - { - if (providerKey == null && CurrentTenant.Id.HasValue) - { - return CurrentTenant.Id.Value.ToString(); - } - - return providerKey; - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj index 42ab46d477..b7e3530ba0 100644 --- a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj +++ b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj @@ -15,6 +15,7 @@ + diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs index da871946ae..8c711e12c2 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs @@ -1,15 +1,27 @@ using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; using Volo.Abp.Security; +using Volo.Abp.Users; namespace Volo.Abp.Settings { [DependsOn( typeof(AbpLocalizationAbstractionsModule), - typeof(AbpSecurityModule) + typeof(AbpSecurityModule), + typeof(AbpMultiTenancyAbstractionsModule) )] public class AbpSettingsModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.ValueProviders.Add(); + options.ValueProviders.Add(); + options.ValueProviders.Add(); + options.ValueProviders.Add(); + }); + } } } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs index 4a3bb7a29a..f6e1229cee 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultValueSettingValueProvider.cs @@ -14,21 +14,9 @@ namespace Volo.Abp.Settings } - public override Task GetOrNullAsync(SettingDefinition setting, string providerKey) + public override Task GetOrNullAsync(SettingDefinition setting) { return Task.FromResult(setting.DefaultValue); } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - setting.DefaultValue = value; - return Task.CompletedTask; - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - setting.DefaultValue = null; - return Task.CompletedTask; - } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs index 78a38cc703..c8d2e38542 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingValueProvider.cs @@ -13,19 +13,9 @@ namespace Volo.Abp.Settings { } - public override Task GetOrNullAsync(SettingDefinition setting, string providerKey) + public override Task GetOrNullAsync(SettingDefinition setting) { return SettingStore.GetOrNullAsync(setting.Name, Name, null); } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - return SettingStore.SetAsync(setting.Name, value, Name, null); - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - return SettingStore.DeleteAsync(setting.Name, Name, null); - } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs index 40ee68f462..69e6319a2f 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs @@ -1,17 +1,14 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; using JetBrains.Annotations; namespace Volo.Abp.Settings { public interface ISettingStore { - Task GetOrNullAsync([NotNull] string name, [CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task SetAsync([NotNull] string name, [NotNull] string value, [CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task> GetListAsync([CanBeNull] string providerName, [CanBeNull] string providerKey); - - Task DeleteAsync([NotNull] string name, [CanBeNull]string providerName, [CanBeNull]string providerKey); + Task GetOrNullAsync( + [NotNull] string name, + [CanBeNull] string providerName, + [CanBeNull] string providerKey + ); } } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs index 3063a7cb15..ab63f47d17 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProvider.cs @@ -7,12 +7,6 @@ namespace Volo.Abp.Settings { string Name { get; } - //TODO: There is a bug here, because we are checking the same providerKey in all providers in a fallback system! - - Task GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); - - Task SetAsync([NotNull] SettingDefinition setting, [NotNull] string value, [CanBeNull] string providerKey); - - Task ClearAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); + Task GetOrNullAsync([NotNull] SettingDefinition setting); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs index 66b4fa6c05..d916f1a95d 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingOptions.cs @@ -11,11 +11,7 @@ namespace Volo.Abp.Settings public SettingOptions() { DefinitionProviders = new TypeList(); - ValueProviders = new TypeList - { - typeof(DefaultValueSettingValueProvider), - typeof(GlobalSettingValueProvider) - }; + ValueProviders = new TypeList(); } } } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs index b826a72e49..63abadae12 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.Settings //TODO: How to implement setting.IsInherited? - var value = await GetOrNullValueFromProvidersAsync(null, providers, setting); + var value = await GetOrNullValueFromProvidersAsync(providers, setting); if (setting.IsEncrypted) { value = SettingEncryptionService.Decrypt(setting, value); @@ -66,7 +66,7 @@ namespace Volo.Abp.Settings { foreach (var setting in settingDefinitions) { - var value = await provider.GetOrNullAsync(setting, null); + var value = await provider.GetOrNullAsync(setting); if (value != null) { if (setting.IsEncrypted) @@ -83,13 +83,12 @@ namespace Volo.Abp.Settings } protected virtual async Task GetOrNullValueFromProvidersAsync( - string providerKey, IEnumerable providers, SettingDefinition setting) { foreach (var provider in providers) { - var value = await provider.GetOrNullAsync(setting, providerKey); + var value = await provider.GetOrNullAsync(setting); if (value != null) { return value; diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs index dcd98945e4..5173f80540 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs @@ -14,10 +14,6 @@ namespace Volo.Abp.Settings SettingStore = settingStore; } - public abstract Task GetOrNullAsync(SettingDefinition setting, string providerKey); - - public abstract Task SetAsync(SettingDefinition setting, string value, string providerKey); - - public abstract Task ClearAsync(SettingDefinition setting, string providerKey); + public abstract Task GetOrNullAsync(SettingDefinition setting); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs new file mode 100644 index 0000000000..7d8177a8e9 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs @@ -0,0 +1,25 @@ +using System.Threading.Tasks; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Settings +{ + public class TenantSettingValueProvider : SettingValueProvider + { + public const string ProviderName = "Tenant"; + + public override string Name => ProviderName; + + protected ICurrentTenant CurrentTenant { get; } + + public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant) + : base(settingStore) + { + CurrentTenant = currentTenant; + } + + public override async Task GetOrNullAsync(SettingDefinition setting) + { + return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString()); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs new file mode 100644 index 0000000000..4a98dcee62 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using Volo.Abp.Users; + +namespace Volo.Abp.Settings +{ + public class UserSettingValueProvider : SettingValueProvider + { + public const string ProviderName = "User"; + + public override string Name => ProviderName; + + protected ICurrentUser CurrentUser { get; } + + public UserSettingValueProvider(ISettingStore settingStore, ICurrentUser currentUser) + : base(settingStore) + { + CurrentUser = currentUser; + } + + public override async Task GetOrNullAsync(SettingDefinition setting) + { + if (CurrentUser.Id == null) + { + return null; + } + + return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString()); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs index e8f5cbc559..2dbe1e5729 100644 --- a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs +++ b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingValueProvider.cs @@ -17,21 +17,9 @@ namespace Volo.Abp.Settings _values = new Dictionary(); } - public Task GetOrNullAsync(SettingDefinition setting, string providerKey) + public Task GetOrNullAsync(SettingDefinition setting) { return Task.FromResult(_values.GetOrDefault(setting.Name)); } - - public Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - _values[setting.Name] = value; - return Task.CompletedTask; - } - - public Task ClearAsync(SettingDefinition setting, string providerKey) - { - _values.Remove(setting.Name); - return Task.CompletedTask; - } } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs index b765b1360a..9ee60b0a93 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManagementProvider.cs @@ -5,7 +5,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.PermissionManagement { - public interface IPermissionManagementProvider : ISingletonDependency + public interface IPermissionManagementProvider : ISingletonDependency //TODO: Consider to remove this pre-assumption { string Name { get; } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs index 2e29ab9c29..674f5daa88 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementOptions.cs @@ -5,6 +5,7 @@ namespace Volo.Abp.PermissionManagement { public class PermissionManagementOptions { + //TODO: rename to Providers public ITypeList ManagementProviders { get; } public Dictionary ProviderPolicies { get; } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs index 0ddc49b076..237b226b07 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs @@ -13,6 +13,15 @@ namespace Volo.Abp.SettingManagement )] public class AbpSettingManagementDomainModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Providers.Add(); + options.Providers.Add(); + options.Providers.Add(); + options.Providers.Add(); + }); + } } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs new file mode 100644 index 0000000000..3bb4ae2655 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class DefaultValueSettingManagementProvider : ISettingManagementProvider, ISingletonDependency + { + public string Name => DefaultValueSettingValueProvider.ProviderName; + + public Task GetOrNullAsync(SettingDefinition setting, string providerKey) + { + return Task.FromResult(setting.DefaultValue); + } + + public Task SetAsync(SettingDefinition setting, string value, string providerKey) + { + throw new AbpException($"Can not set default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation."); + } + + public Task ClearAsync(SettingDefinition setting, string providerKey) + { + throw new AbpException($"Can not clear default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation."); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagerExtensions.cs new file mode 100644 index 0000000000..20ad176ecc --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagerExtensions.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public static class DefaultValueSettingManagerExtensions + { + public static Task GetOrNullDefaultAsync(this ISettingManager settingManager, [NotNull] string name, bool fallback = true) + { + return settingManager.GetOrNullAsync(name, DefaultValueSettingValueProvider.ProviderName, null, fallback); + } + + public static Task> GetAllDefaultAsync(this ISettingManager settingManager, bool fallback = true) + { + return settingManager.GetAllAsync(DefaultValueSettingValueProvider.ProviderName, null, fallback); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagementProvider.cs new file mode 100644 index 0000000000..85201eb39a --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagementProvider.cs @@ -0,0 +1,21 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class GlobalSettingManagementProvider : SettingManagementProvider, ITransientDependency + { + public override string Name => GlobalSettingValueProvider.ProviderName; + + public GlobalSettingManagementProvider(ISettingManagementStore settingManagementStore) + : base(settingManagementStore) + { + + } + + protected override string NormalizeProviderKey(string providerKey) + { + return null; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagerExtensions.cs similarity index 93% rename from framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagerExtensions.cs index d5dabccfe8..e403eb41a3 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/GlobalSettingManagerExtensions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/GlobalSettingManagerExtensions.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public static class GlobalSettingManagerExtensions { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementProvider.cs new file mode 100644 index 0000000000..827b0ff851 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementProvider.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public interface ISettingManagementProvider + { + string Name { get; } + + Task GetOrNullAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); + + Task SetAsync([NotNull] SettingDefinition setting, [NotNull] string value, [CanBeNull] string providerKey); + + Task ClearAsync([NotNull] SettingDefinition setting, [CanBeNull] string providerKey); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementStore.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementStore.cs new file mode 100644 index 0000000000..eebdc69357 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManagementStore.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public interface ISettingManagementStore + { + Task GetOrNullAsync(string name, string providerName, string providerKey); + + Task> GetListAsync(string providerName, string providerKey); + + Task SetAsync(string name, string value, string providerName, string providerKey); + + Task DeleteAsync(string name, string providerName, string providerKey); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs similarity index 90% rename from framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs index bd0b5c7d20..77ae59e664 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public interface ISettingManager { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementOptions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementOptions.cs new file mode 100644 index 0000000000..06ced8e8a8 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementOptions.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Collections; + +namespace Volo.Abp.SettingManagement +{ + public class SettingManagementOptions + { + public ITypeList Providers { get; } + + public SettingManagementOptions() + { + Providers = new TypeList(); + } + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs new file mode 100644 index 0000000000..d350cc28d7 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs @@ -0,0 +1,37 @@ +using System.Threading.Tasks; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public abstract class SettingManagementProvider : ISettingManagementProvider + { + public abstract string Name { get; } + + protected ISettingManagementStore SettingManagementStore { get; } + + protected SettingManagementProvider(ISettingManagementStore settingManagementStore) + { + SettingManagementStore = settingManagementStore; + } + + public async Task GetOrNullAsync(SettingDefinition setting, string providerKey) + { + return await SettingManagementStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); + } + + public virtual async Task SetAsync(SettingDefinition setting, string value, string providerKey) + { + await SettingManagementStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)); + } + + public virtual async Task ClearAsync(SettingDefinition setting, string providerKey) + { + await SettingManagementStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); + } + + protected virtual string NormalizeProviderKey(string providerKey) + { + return providerKey; + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs new file mode 100644 index 0000000000..8c9cfc8684 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class SettingManagementStore : ISettingManagementStore, ITransientDependency + { + protected IDistributedCache Cache { get; } + protected ISettingRepository SettingRepository { get; } + protected IGuidGenerator GuidGenerator { get; } + + public SettingManagementStore( + ISettingRepository settingRepository, + IGuidGenerator guidGenerator, + IDistributedCache cache) + { + SettingRepository = settingRepository; + GuidGenerator = guidGenerator; + Cache = cache; + } + + public async Task GetOrNullAsync(string name, string providerName, string providerKey) + { + var cacheItem = await GetCacheItemAsync(name, providerName, providerKey); + return cacheItem.Value; + } + + public async Task SetAsync(string name, string value, string providerName, string providerKey) + { + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); + if (setting == null) + { + setting = new Setting(GuidGenerator.Create(), name, value, providerName, providerKey); + await SettingRepository.InsertAsync(setting); + } + else + { + setting.Value = value; + await SettingRepository.UpdateAsync(setting); + } + } + + public async Task> GetListAsync(string providerName, string providerKey) + { + var settings = await SettingRepository.GetListAsync(providerName, providerKey); + return settings.Select(s => new SettingValue(s.Name, s.Value)).ToList(); + } + + public async Task DeleteAsync(string name, string providerName, string providerKey) + { + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); + if (setting != null) + { + await SettingRepository.DeleteAsync(setting); + } + } + + protected virtual async Task GetCacheItemAsync(string name, string providerName, string providerKey) + { + var cacheKey = CalculateCacheKey(name, providerName, providerKey); + var cacheItem = await Cache.GetAsync(cacheKey); + + if (cacheItem != null) + { + return cacheItem; + } + + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); + + cacheItem = new SettingCacheItem(setting?.Value); + + await Cache.SetAsync( + cacheKey, + cacheItem + ); + + return cacheItem; + } + + protected virtual string CalculateCacheKey(string name, string providerName, string providerKey) + { + return SettingCacheItem.CalculateCacheKey(name, providerName, providerKey); + } + } +} diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs similarity index 81% rename from framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs index fffa1021a9..cfb4cccbe3 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs @@ -5,18 +5,20 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public class SettingManager : ISettingManager, ISingletonDependency { protected ISettingDefinitionManager SettingDefinitionManager { get; } protected ISettingEncryptionService SettingEncryptionService { get; } - protected Lazy> Providers { get; } - protected SettingOptions Options { get; } + protected List Providers => _lazyProviders.Value; + protected SettingManagementOptions Options { get; } + private readonly Lazy> _lazyProviders; public SettingManager( - IOptions options, + IOptions options, IServiceProvider serviceProvider, ISettingDefinitionManager settingDefinitionManager, ISettingEncryptionService settingEncryptionService) @@ -25,10 +27,12 @@ namespace Volo.Abp.Settings SettingEncryptionService = settingEncryptionService; Options = options.Value; - Providers = new Lazy>( + //TODO: Instead, use IHybridServiceScopeFactory and create a scope..? + + _lazyProviders = new Lazy>( () => Options - .ValueProviders - .Select(c => serviceProvider.GetRequiredService(c) as ISettingValueProvider) + .Providers + .Select(c => serviceProvider.GetRequiredService(c) as ISettingManagementProvider) .ToList(), true ); @@ -47,7 +51,7 @@ namespace Volo.Abp.Settings Check.NotNull(providerName, nameof(providerName)); var settingDefinitions = SettingDefinitionManager.GetAll(); - var providers = Enumerable.Reverse(Providers.Value) + var providers = Enumerable.Reverse(Providers) .SkipWhile(c => c.Name != providerName); if (!fallback) @@ -72,7 +76,10 @@ namespace Volo.Abp.Settings { foreach (var provider in providerList) { - var providerValue = await provider.GetOrNullAsync(setting, providerKey); + var providerValue = await provider.GetOrNullAsync( + setting, + provider.Name == providerName ? providerKey : null + ); if (providerValue != null) { value = providerValue; @@ -81,7 +88,10 @@ namespace Volo.Abp.Settings } else { - value = await providerList[0].GetOrNullAsync(setting, providerKey); + value = await providerList[0].GetOrNullAsync( + setting, + providerKey + ); } if (setting.IsEncrypted) @@ -106,7 +116,7 @@ namespace Volo.Abp.Settings var setting = SettingDefinitionManager.Get(name); var providers = Enumerable - .Reverse(Providers.Value) + .Reverse(Providers) .SkipWhile(p => p.Name != providerName) .ToList(); @@ -122,10 +132,10 @@ namespace Volo.Abp.Settings if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null) { - //Clear the value if it's same as it's fallback value - var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, providerKey); + var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null); if (fallbackValue == value) { + //Clear the value if it's same as it's fallback value value = null; } } @@ -154,7 +164,7 @@ namespace Volo.Abp.Settings { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable - .Reverse(Providers.Value); + .Reverse(Providers); if (providerName != null) { @@ -166,30 +176,26 @@ namespace Volo.Abp.Settings providers = providers.TakeWhile(c => c.Name == providerName); } - var value = await GetOrNullValueFromProvidersAsync(providerKey, providers, setting); - if (setting.IsEncrypted) - { - value = SettingEncryptionService.Decrypt(setting, value); - } - - return value; - } - - protected virtual async Task GetOrNullValueFromProvidersAsync( - string providerKey, - IEnumerable providers, - SettingDefinition setting) - { + string value = null; foreach (var provider in providers) { - var value = await provider.GetOrNullAsync(setting, providerKey); + value = await provider.GetOrNullAsync( + setting, + provider.Name == providerName ? providerKey : null + ); + if (value != null) { - return value; + break; } } - return null; + if (setting.IsEncrypted) + { + value = SettingEncryptionService.Decrypt(setting, value); + } + + return value; } } } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagementProvider.cs new file mode 100644 index 0000000000..947e2d8799 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagementProvider.cs @@ -0,0 +1,31 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class TenantSettingManagementProvider : SettingManagementProvider, ITransientDependency + { + public override string Name => TenantSettingValueProvider.ProviderName; + + protected ICurrentTenant CurrentTenant { get; } + + public TenantSettingManagementProvider( + ISettingManagementStore settingManagementStore, + ICurrentTenant currentTenant) + : base(settingManagementStore) + { + CurrentTenant = currentTenant; + } + + protected override string NormalizeProviderKey(string providerKey) + { + if (providerKey != null) + { + return providerKey; + } + + return CurrentTenant.Id?.ToString(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs similarity index 96% rename from framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs index f3500bf80a..f5cc345931 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/TenantSettingManagerExtensions.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; -using Volo.Abp.MultiTenancy; +using Volo.Abp.Settings; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { public static class TenantSettingManagerExtensions { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagementProvider.cs new file mode 100644 index 0000000000..790e0eaa0c --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagementProvider.cs @@ -0,0 +1,31 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; +using Volo.Abp.Users; + +namespace Volo.Abp.SettingManagement +{ + public class UserSettingManagementProvider : SettingManagementProvider, ITransientDependency + { + public override string Name => UserSettingValueProvider.ProviderName; + + protected ICurrentUser CurrentUser { get; } + + public UserSettingManagementProvider( + ISettingManagementStore settingManagementStore, + ICurrentUser currentUser) + : base(settingManagementStore) + { + CurrentUser = currentUser; + } + + protected override string NormalizeProviderKey(string providerKey) + { + if (providerKey != null) + { + return providerKey; + } + + return CurrentUser.Id?.ToString(); + } + } +} \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Settings/UserSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagerExtensions.cs similarity index 96% rename from modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Settings/UserSettingManagerExtensions.cs rename to modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagerExtensions.cs index 4e3a1dd574..2b58382463 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Settings/UserSettingManagerExtensions.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/UserSettingManagerExtensions.cs @@ -2,9 +2,10 @@ using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; +using Volo.Abp.Settings; using Volo.Abp.Users; -namespace Volo.Abp.Settings +namespace Volo.Abp.SettingManagement { //TODO: Consider to move to another package? diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs index ce0a71b6db..79ae4702c8 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.SettingManagement public void Build() { - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting1", @@ -31,7 +31,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting2", @@ -40,7 +40,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting2", @@ -50,7 +50,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySetting2", @@ -60,7 +60,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySettingWithoutInherit", @@ -69,7 +69,7 @@ namespace Volo.Abp.SettingManagement ) ); - _settingRepository.InsertAsync( + _settingRepository.Insert( new Setting( _guidGenerator.Create(), "MySettingWithoutInherit", diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs index 0b9cc288d6..4b42572f0a 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs @@ -1,16 +1,16 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using NSubstitute; using Shouldly; +using System; +using System.Linq; +using System.Threading.Tasks; using Volo.Abp.Settings; using Volo.Abp.Users; using Xunit; namespace Volo.Abp.SettingManagement { - public class SettingManager_User_Tests: SettingsTestBase + public class SettingManager_User_Tests : SettingsTestBase { private Guid? _currentUserId; diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs index f27813e04b..2c482606eb 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs +++ b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/AbpUsersAbstractionModule.cs @@ -14,12 +14,6 @@ namespace Volo.Abp.Users )] public class AbpUsersAbstractionModule : AbpModule { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.ValueProviders.Add(); - }); - } + } } diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserSettingValueProvider.cs b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserSettingValueProvider.cs deleted file mode 100644 index 345b0e6929..0000000000 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserSettingValueProvider.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Settings; - -namespace Volo.Abp.Users -{ - //TODO: Optimization: Get all settings and cache it! - //TODO: Think if it's true to have this provider in this project? - - public class UserSettingValueProvider : SettingValueProvider - { - public const string ProviderName = "User"; - - public override string Name => ProviderName; - - protected ICurrentUser CurrentUser { get; } - - public UserSettingValueProvider(ISettingStore settingStore, ICurrentUser currentUser) - : base(settingStore) - { - CurrentUser = currentUser; - } - - public override async Task GetOrNullAsync(SettingDefinition setting, string providerKey) - { - return await SettingStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - public override Task SetAsync(SettingDefinition setting, string value, string providerKey) - { - return SettingStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)); - } - - public override Task ClearAsync(SettingDefinition setting, string providerKey) - { - return SettingStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); - } - - private string NormalizeProviderKey(string providerKey) - { - if (providerKey == null && CurrentUser.Id.HasValue) - { - return CurrentUser.Id.Value.ToString(); - } - - return providerKey; - } - } -} \ No newline at end of file