Browse Source

Added IsVisibleToClients, IsInherited and CustomData to the SettingDefinition.

pull/204/head
Halil İbrahim Kalkan 9 years ago
parent
commit
e9ad96c510
  1. 35
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs
  2. 33
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs
  3. 8
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerSyncExtensions.cs
  4. 3
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs
  5. 11
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs
  6. 1
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingDefinitionProvider.cs

35
src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs

@ -2,15 +2,46 @@
{ {
public class SettingDefinition public class SettingDefinition
{ {
/// <summary>
/// Unique name of the setting.
/// </summary>
public string Name { get; } public string Name { get; }
/// <summary>
/// Default value of the setting.
/// </summary>
public string DefaultValue { get; set; } public string DefaultValue { get; set; }
public SettingDefinition(string name, string defaultValue = null) /// <summary>
/// Can clients see this setting and it's value.
/// It maybe dangerous for some settings to be visible to clients (such as email server password).
/// Default: false.
/// </summary>
public bool IsVisibleToClients { get; set; }
/// <summary>
/// Is this setting inherited from parent scopes.
/// Default: True.
/// </summary>
public bool IsInherited { get; set; }
/// <summary>
/// Can be used to store a custom object related to this setting.
/// </summary>
public object CustomData { get; set; }
public SettingDefinition(
string name,
string defaultValue = null,
bool isVisibleToClients = false,
bool isInherited = true,
object customData = null)
{ {
Name = name; Name = name;
DefaultValue = defaultValue; DefaultValue = defaultValue;
IsVisibleToClients = isVisibleToClients;
IsInherited = isInherited;
CustomData = customData;
} }
} }
} }

33
src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs

@ -48,7 +48,7 @@ namespace Volo.Abp.Settings
{ {
Check.NotNull(name, nameof(name)); Check.NotNull(name, nameof(name));
Check.NotNull(entityType, nameof(entityType)); Check.NotNull(entityType, nameof(entityType));
return GetOrNullInternalAsync(name, entityType, entityId, fallback); return GetOrNullInternalAsync(name, entityType, entityId, fallback);
} }
@ -63,7 +63,7 @@ namespace Volo.Abp.Settings
providers = providers.SkipWhile(c => c.EntityType != entityType); providers = providers.SkipWhile(c => c.EntityType != entityType);
} }
if (!fallback) if (!fallback || !setting.IsInherited)
{ {
providers = providers.TakeWhile(c => c.EntityType == entityType); providers = providers.TakeWhile(c => c.EntityType == entityType);
} }
@ -114,16 +114,29 @@ namespace Volo.Abp.Settings
providers = providers.TakeWhile(c => c.EntityType == entityType); providers = providers.TakeWhile(c => c.EntityType == entityType);
} }
providers = providers.Reverse(); var providerList = providers.Reverse().ToList();
foreach (var provider in providers) if (providerList.Any())
{ {
foreach (var setting in settingDefinitions) foreach (var setting in settingDefinitions)
{ {
var value = await provider.GetOrNullAsync(setting, entityId); if (setting.IsInherited)
if (value != null)
{ {
settingValues[setting.Name] = new SettingValue(setting.Name, value); foreach (var provider in providerList)
{
var value = await provider.GetOrNullAsync(setting, entityId);
if (value != null)
{
settingValues[setting.Name] = new SettingValue(setting.Name, value);
}
}
}
else
{
settingValues[setting.Name] = new SettingValue(
setting.Name,
await providerList[0].GetOrNullAsync(setting, entityId)
);
} }
} }
} }
@ -148,9 +161,9 @@ namespace Volo.Abp.Settings
return; return;
} }
//Clear the value if it's same as it's fallback value if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null)
if (providers.Count > 1 && !forceToSet && value != null)
{ {
//Clear the value if it's same as it's fallback value
var fallbackValue = await GetOrNullInternalAsync(name, providers[1].EntityType, entityId); var fallbackValue = await GetOrNullInternalAsync(name, providers[1].EntityType, entityId);
if (fallbackValue == value) if (fallbackValue == value)
{ {
@ -160,7 +173,7 @@ namespace Volo.Abp.Settings
providers = providers providers = providers
.TakeWhile(p => p.EntityType == entityType) .TakeWhile(p => p.EntityType == entityType)
.ToList(); .ToList(); //Getting list for case of there are more than one provider with same EntityType
if (value == null) if (value == null)
{ {

8
src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManagerSyncExtensions.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.Settings
{
public static class SettingManagerSyncExtensions
{
//TODO: Add sync extension methods for all setting manager methods.
//TODO: Also add sync extension methods for all value provider extensions (like GlobalSettingManagerExtensions).
}
}

3
test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs

@ -26,6 +26,9 @@ namespace Volo.Abp.Settings
_settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "default-store-value", GlobalSettingValueProvider.DefaultEntityType)); _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "default-store-value", GlobalSettingValueProvider.DefaultEntityType));
_settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user1-store-value", UserSettingValueProvider.DefaultEntityType, User1Id.ToString())); _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user1-store-value", UserSettingValueProvider.DefaultEntityType, User1Id.ToString()));
_settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user2-store-value", UserSettingValueProvider.DefaultEntityType, User2Id.ToString())); _settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySetting2", "user2-store-value", UserSettingValueProvider.DefaultEntityType, User2Id.ToString()));
_settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySettingWithoutInherit", "default-store-value", GlobalSettingValueProvider.DefaultEntityType));
_settingRepository.InsertAsync(new Setting(_guidGenerator.Create(), "MySettingWithoutInherit", "user1-store-value", UserSettingValueProvider.DefaultEntityType, User1Id.ToString()));
} }
} }
} }

11
test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs

@ -100,8 +100,9 @@ namespace Volo.Abp.Settings
public async Task Should_Get_All_From_Store_For_Given_User_Without_Fallback() public async Task Should_Get_All_From_Store_For_Given_User_Without_Fallback()
{ {
var settingValues = await _settingManager.GetAllForUserAsync(AbpIdentityTestDataBuilder.User1Id, fallback: false); var settingValues = await _settingManager.GetAllForUserAsync(AbpIdentityTestDataBuilder.User1Id, fallback: false);
settingValues.Count.ShouldBe(1);
settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "user1-store-value"); settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "user1-store-value");
settingValues.ShouldContain(sv => sv.Name == "MySettingWithoutInherit" && sv.Value == "user1-store-value");
settingValues.ShouldNotContain(sv => sv.Name == "MySetting1");
} }
[Fact] [Fact]
@ -172,5 +173,13 @@ namespace Volo.Abp.Settings
(await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User1Id)) (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User1Id))
.ShouldBe("default-store-value"); .ShouldBe("default-store-value");
} }
[Fact]
public async Task Should_Get_For_Given_User_For_Non_Inherited_Setting()
{
(await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", AbpIdentityTestDataBuilder.User1Id)).ShouldBe("user1-store-value");
(await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", AbpIdentityTestDataBuilder.User2Id)).ShouldBeNull(); //Does not inherit!
(await _settingManager.GetOrNullGlobalAsync("MySettingWithoutInherit")).ShouldBe("default-store-value");
}
} }
} }

1
test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/TestSettingDefinitionProvider.cs

@ -6,6 +6,7 @@
{ {
context.Add(new SettingDefinition("MySetting1")); context.Add(new SettingDefinition("MySetting1"));
context.Add(new SettingDefinition("MySetting2")); context.Add(new SettingDefinition("MySetting2"));
context.Add(new SettingDefinition("MySettingWithoutInherit", isInherited: false));
context.Add(new SettingDefinition("SettingNotSetInStore", defaultValue: "default-value")); context.Add(new SettingDefinition("SettingNotSetInStore", defaultValue: "default-value"));
} }
} }

Loading…
Cancel
Save