diff --git a/docs/en/Modules/Index.md b/docs/en/Modules/Index.md index 662ecf30a6..97af3db132 100644 --- a/docs/en/Modules/Index.md +++ b/docs/en/Modules/Index.md @@ -19,7 +19,7 @@ There are some **free and open source** application modules developed and mainta * **Identity**: Used to manage roles, users and their permissions. * **Identity Server**: Integrates to IdentityServer4. * **Permission Management**: Used to persist permissions. -* **Setting Management**: Used to persist settings. +* **[Setting Management](Setting-Management.md)**: Used to persist and manage the [settings](../Settings.md). * **Tenant Management**: Used to manage tenants for a [multi-tenant](../Multi-Tenancy.md) application. * **Users**: Used to abstract users, so other modules can depend on this instead of the Identity module. diff --git a/docs/en/Modules/Setting-Management.md b/docs/en/Modules/Setting-Management.md index 21443391f6..d5e4790c9d 100644 --- a/docs/en/Modules/Setting-Management.md +++ b/docs/en/Modules/Setting-Management.md @@ -1,3 +1,83 @@ # Setting Management Module -Setting Management Module implements the `ISettingStore` (see [the setting system](Settings.md)) to store the setting values in a database and provides the `ISettingManager` to manage (change) the setting values in the database. \ No newline at end of file +Setting Management Module implements the `ISettingStore` (see [the setting system](Settings.md)) to store the setting values in a database and provides the `ISettingManager` to manage (change) the setting values in the database. + +> Setting Management module is already installed and configured for [the startup templates](../Startup-Templates/Index.md). So, most of the times you don't need to manually add this module to your application. + +## ISettingManager + +`ISettingManager` is used to get and set the values for the settings. Examples: + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.SettingManagement; + +namespace Demo +{ + public class MyService : ITransientDependency + { + private readonly ISettingManager _settingManager; + + //Inject ISettingManager service + public MyService(ISettingManager settingManager) + { + _settingManager = settingManager; + } + + public async Task FooAsync() + { + Guid user1Id = ...; + Guid tenant1Id = ...; + + //Get/set a setting value for the current user or the specified user + + string layoutType1 = + await _settingManager.GetOrNullForCurrentUserAsync("App.UI.LayoutType"); + string layoutType2 = + await _settingManager.GetOrNullForUserAsync("App.UI.LayoutType", user1Id); + + await _settingManager.SetForCurrentUserAsync("App.UI.LayoutType", "LeftMenu"); + await _settingManager.SetForUserAsync(user1Id, "App.UI.LayoutType", "LeftMenu"); + + //Get/set a setting value for the current tenant or the specified tenant + + string layoutType3 = + await _settingManager.GetOrNullForCurrentTenantAsync("App.UI.LayoutType"); + string layoutType4 = + await _settingManager.GetOrNullForTenantAsync("App.UI.LayoutType", tenant1Id); + + await _settingManager.SetForCurrentTenantAsync("App.UI.LayoutType", "LeftMenu"); + await _settingManager.SetForTenantAsync(tenant1Id, "App.UI.LayoutType", "LeftMenu"); + + //Get/set a global and default setting value + + string layoutType5 = + await _settingManager.GetOrNullGlobalAsync("App.UI.LayoutType"); + string layoutType6 = + await _settingManager.GetOrNullDefaultAsync("App.UI.LayoutType"); + + await _settingManager.SetGlobalAsync("App.UI.LayoutType", "TopMenu"); + } + } +} + +```` + +So, you can get or set a setting value for different setting value providers (Default, Global, User, Tenant... etc). + +### Setting Cache + +Setting values are cached using the [distributed cache](../Caching.md) system. Always use the `ISettingManager` to change the setting values which manages the cache for you. + +## Setting Management Providers + +Setting Management module is extensible, just like the [setting system](../Settings.md). You can extend it by defining setting management providers. There are four pre-built setting management providers registered by the order below: + +* `DefaultValueSettingManagementProvider`: Gets the value from the default value of the setting definition. It can not set the default value since default values are hard-coded on the setting definition. +* `GlobalSettingManagementProvider`: Gets or sets the global (system-wide) value for a setting. +* `TenantSettingManagementProvider`: Gets or sets the setting value for a tenant. +* `UserSettingManagementProvider`: Gets the setting value for a user. + +`ISettingManager` uses the setting management providers on get/set methods. Typically, every setting management provider defines extension methods on the `ISettingManagement` service (like `SetForUserAsync` defined by the user setting management provider). \ No newline at end of file diff --git a/docs/en/Settings.md b/docs/en/Settings.md index 0d7aea3bbf..28b1b370ee 100644 --- a/docs/en/Settings.md +++ b/docs/en/Settings.md @@ -165,6 +165,12 @@ This example adds it as the last item, so it will be the first value provider us While a setting value provider is free to use any source to get the setting value, the`ISettingStore` service is the default source of the setting values. Global, Tenant and User setting value providers use it. +## ISettingEncryptionService + +`ISettingEncryptionService` is used to encrypt/decrypt setting values when `IsEncrypted` property of a setting definition was set to `true`. + +You can replace this service in the dependency injection system to customize the encryption/decryption process. Default implementation uses the `IStringEncryptionService` which is implemented with the AES algorithm by default (see string [encryption document](String-Encryption.md) for more). + ## Setting Management Module The core setting system is pretty independent and doesn't make any assumption about how you manage (change) the setting values. Even the default `ISettingStore` implementation is the `NullSettingStore` which returns null for all setting values. diff --git a/docs/en/String-Encryption.md b/docs/en/String-Encryption.md new file mode 100644 index 0000000000..bc2a9c6c7e --- /dev/null +++ b/docs/en/String-Encryption.md @@ -0,0 +1,4 @@ +# String Encryption + +TODO! +