diff --git a/src/EasyAbp.Abp.SettingUi.Application/SettingUiAppService.cs b/src/EasyAbp.Abp.SettingUi.Application/SettingUiAppService.cs index 921d954..e7caee3 100644 --- a/src/EasyAbp.Abp.SettingUi.Application/SettingUiAppService.cs +++ b/src/EasyAbp.Abp.SettingUi.Application/SettingUiAppService.cs @@ -17,7 +17,6 @@ using Volo.Abp.Localization; using Volo.Abp.SettingManagement; using Volo.Abp.Settings; -using Volo.Abp.Threading; using Volo.Abp.VirtualFileSystem; namespace EasyAbp.Abp.SettingUi @@ -130,7 +129,7 @@ public virtual async Task SetSettingValuesAsync(Dictionary setti continue; } - await SetSettingAsync(setting, kv.Value); + await SetSettingAsync(setting, kv.Value); // todo: needs permission check? } } @@ -168,6 +167,7 @@ protected virtual Task SetSettingAsync(SettingDefinition setting, string value) { return _fileProvider .GetDirectoryContents(SettingUiConst.SettingPropertiesFileFolder) + .Where(x => x.Name.EndsWith(".json")) .Select(content => _jsonSerializer.Deserialize>>(content.ReadAsString())) .SelectMany(dict => dict) @@ -260,7 +260,10 @@ protected virtual async Task CreateSettingInfoAsync(SettingDefiniti description = settingDefinition.Description.Localize(_factory); } - string value = await SettingProvider.GetOrNullAsync(name); + /* Hide default/global value for tenants if the setting item is encrypted. */ + var value = settingDefinition.IsEncrypted && CurrentTenant.IsAvailable + ? await _settingManager.GetOrNullForCurrentTenantAsync(name, false) + : await SettingProvider.GetOrNullAsync(name); var si = new SettingInfo { diff --git a/test/EasyAbp.Abp.SettingUi.Application.Tests/SettingUi/SettingDefinitionGroupAppService_Tests.cs b/test/EasyAbp.Abp.SettingUi.Application.Tests/SettingUi/SettingDefinitionGroupAppService_Tests.cs index b47d124..175d859 100644 --- a/test/EasyAbp.Abp.SettingUi.Application.Tests/SettingUi/SettingDefinitionGroupAppService_Tests.cs +++ b/test/EasyAbp.Abp.SettingUi.Application.Tests/SettingUi/SettingDefinitionGroupAppService_Tests.cs @@ -1,9 +1,11 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using NSubstitute; using Shouldly; +using Volo.Abp.MultiTenancy; using Volo.Abp.SettingManagement; using Volo.Abp.Settings; using Xunit; @@ -34,7 +36,7 @@ protected override void AfterAddApplication(IServiceCollection services) .WithProperty(SettingUiConst.Group2, "TestGroup2") .WithProperty(SettingUiConst.Type, "number"); var setting2 = new SettingDefinition("Test.Setting2", "2"); - var setting3 = new SettingDefinition("Test.Setting3", "3"); + var setting3 = new SettingDefinition("Test.Setting3", "3", isEncrypted: true); settingDefinitionManager.GetAllAsync().Returns(new List { setting1, @@ -121,5 +123,27 @@ public async Task SettingValues_Should_Be_Set() await _settingManager.Received().SetForCurrentTenantAsync("Test.Setting2", "value2"); await _settingManager.DidNotReceive().SetForCurrentTenantAsync("RequestToken", "value3"); } + + [Fact] + public async Task Should_Hide_Encrypted_Default_Value_For_Tenants() + { + var currentTenant = GetRequiredService(); + + var result = await _service.GroupSettingDefinitionsAsync(); + + var setting3 = result.First(x => x.GroupName == SettingUiConst.DefaultGroup).SettingInfos + .First(x => x.Name == "Test.Setting3"); + + setting3.Value.ShouldBe("3"); + + using var changeTenant = currentTenant.Change(Guid.NewGuid()); + + result = await _service.GroupSettingDefinitionsAsync(); + + setting3 = result.First(x => x.GroupName == SettingUiConst.DefaultGroup).SettingInfos + .First(x => x.Name == "Test.Setting3"); + + setting3.Value.ShouldBeNullOrEmpty(); + } } } \ No newline at end of file