protected virtual async Task <ListResultDto <SettingDto> > GetAllSettingAsync(string providerName, string providerKey) { var settingsDto = new List <SettingDto>(); var settings = await SettingManager.GetAllAsync(providerName, providerKey); foreach (var setting in settings) { var settingDefinition = SettingDefinitionManager.Get(setting.Name); if (settingDefinition.Providers.Count > 0 && !settingDefinition.Providers.Any(p => p.Equals(providerName))) { continue; } var settingInfo = new SettingDto { Name = setting.Name, Value = setting.Value ?? settingDefinition.DefaultValue, DefaultValue = settingDefinition.DefaultValue, Description = settingDefinition.Description.Localize(StringLocalizerFactory), DisplayName = settingDefinition.DisplayName.Localize(StringLocalizerFactory) }; settingsDto.Add(settingInfo); } return(new ListResultDto <SettingDto>(settingsDto)); }
protected virtual ListResultDto <SettingDto> GetAllSetting( List <SettingValue> settings) { var settingsDto = new List <SettingDto>(); foreach (var setting in settings) { var settingDefinition = SettingDefinitionManager.Get(setting.Name); if (!settingDefinition.IsVisibleToClients) { continue; } var settingInfo = new SettingDto { Name = setting.Name, Value = setting.Value, DefaultValue = settingDefinition.DefaultValue, Description = settingDefinition.Description.Localize(StringLocalizerFactory), DisplayName = settingDefinition.DisplayName.Localize(StringLocalizerFactory) }; settingsDto.Add(settingInfo); } return(new ListResultDto <SettingDto>(settingsDto)); }
public virtual async Task SetAsync(string name, string value, string providerName, string providerKey, bool forceToSet = false) { Check.NotNull(name, nameof(name)); Check.NotNull(providerName, nameof(providerName)); var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers) .SkipWhile(p => p.Name != providerName) .ToList(); if (!providers.Any()) { return; } if (setting.IsEncrypted) { value = SettingEncryptionService.Encrypt(setting, value); } if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null) { var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null).ConfigureAwait(false); if (fallbackValue == value) { //Clear the value if it's same as it's fallback value value = null; } } providers = providers .TakeWhile(p => p.Name == providerName) .ToList(); //Getting list for case of there are more than one provider with same providerName if (value == null) { foreach (var provider in providers) { await provider.ClearAsync(setting, providerKey).ConfigureAwait(false); } } else { foreach (var provider in providers) { await provider.SetAsync(setting, value, providerKey).ConfigureAwait(false); } } }
public virtual async Task <string> GetOrNullAsync(string name) { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(SettingValueProviderManager.Providers); if (setting.Providers.Any()) { providers = providers.Where(p => setting.Providers.Contains(p.Name)); } //TODO: How to implement setting.IsInherited? var value = await GetOrNullValueFromProvidersAsync(providers, setting); if (value != null && setting.IsEncrypted) { value = SettingEncryptionService.Decrypt(setting, value); } return(value); }
protected virtual async Task <string> GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true) { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers); if (providerName != null) { providers = providers.SkipWhile(c => c.Name != providerName); } if (!fallback || !setting.IsInherited) { providers = providers.TakeWhile(c => c.Name == providerName); } string value = null; foreach (var provider in providers) { value = await provider.GetOrNullAsync( setting, provider.Name == providerName?providerKey : null ).ConfigureAwait(false); if (value != null) { break; } } if (setting.IsEncrypted) { value = SettingEncryptionService.Decrypt(setting, value); } return(value); }
protected virtual async Task <ListResultDto <SettingGroupDto> > GetAllForProviderAsync(string providerName, string providerKey) { /* * 2020-11-19 * [email protected] * * 之所以重构为这种看似硬编码的设计,是因为硬编码的都是常用的自带的配置 * * 自定义的应用模块可以实现返回相同Dto的配置服务,然后通过路由的聚合功能, * 轻松加入到前端的设置管理(因为vue前端已设计为动态表单页面) * * 最初的设计才是不合理的,前端不能硬编码设置管理界面,这应该是后端的事情 */ var settingGroups = new List <SettingGroupDto>(); #region 系统设置 var sysSettingGroup = new SettingGroupDto(L["DisplayName:System"], L["Description:System"]); // 语言 var languageSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Language"], L["Description:System.Language"]); languageSetting.AddDetail( SettingDefinitionManager.Get(LocalizationSettingNames.DefaultLanguage), StringLocalizerFactory, await SettingManager.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage, providerName, providerKey), ValueType.Option) .AddOptions(LocalizationOptions.Languages.Select(l => new OptionDto(l.DisplayName, l.CultureName))); // 时区 var timingSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Timing"], L["Description:System.Timing"]); timingSetting.AddDetail( SettingDefinitionManager.Get(TimingSettingNames.TimeZone), StringLocalizerFactory, await SettingManager.GetOrNullAsync(TimingSettingNames.TimeZone, providerName, providerKey), ValueType.String); settingGroups.Add(sysSettingGroup); #endregion #region 安全设置 var securitySettingGroup = new SettingGroupDto(L["DisplayName:Security"], L["Description:Security"]); // 用户账户 var accountSetting = securitySettingGroup.AddSetting(L["DisplayName:Security.Account"], L["Description:Security.Account"]); // 启用本地登录 accountSetting.AddDetail( SettingDefinitionManager.Get(AccountSettingNames.EnableLocalLogin), StringLocalizerFactory, await SettingManager.GetOrNullAsync(AccountSettingNames.EnableLocalLogin, providerName, providerKey), ValueType.Boolean); accountSetting.AddDetail( SettingDefinitionManager.Get(AccountSettingNames.IsSelfRegistrationEnabled), StringLocalizerFactory, await SettingManager.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled, providerName, providerKey), ValueType.Boolean); settingGroups.Add(securitySettingGroup); #endregion #region 身份标识设置 // 身份标识设置 var identitySetting = new SettingGroupDto(L["DisplayName:Identity"], L["Description:Identity"]); #region 用户锁定 var lockoutSetting = identitySetting.AddSetting(L["DisplayName:Identity.Lockout"], L["Description:Identity.Lockout"]); lockoutSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Lockout.AllowedForNewUsers), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, providerName, providerKey), ValueType.Boolean); lockoutSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Lockout.LockoutDuration), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.LockoutDuration, providerName, providerKey), ValueType.Number); lockoutSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, providerName, providerKey), ValueType.Number); #endregion #region 用户 var userSetting = identitySetting.AddSetting(L["DisplayName:Identity.User"], L["Description:Identity.User"]); userSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.User.IsEmailUpdateEnabled), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsEmailUpdateEnabled, providerName, providerKey), ValueType.Boolean); userSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.User.IsUserNameUpdateEnabled), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled, providerName, providerKey), ValueType.Boolean); userSetting.AddDetail( SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister), StringLocalizerFactory, await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister, providerName, providerKey), ValueType.String); userSetting.AddDetail( SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword), StringLocalizerFactory, await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword, providerName, providerKey), ValueType.String); userSetting.AddDetail( SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin), StringLocalizerFactory, await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin, providerName, providerKey), ValueType.String); userSetting.AddDetail( SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed), StringLocalizerFactory, await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed, providerName, providerKey), ValueType.String); userSetting.AddDetail( SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval), StringLocalizerFactory, await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval, providerName, providerKey), ValueType.Number); #endregion #region 登录 var signinSetting = identitySetting.AddSetting(L["DisplayName:Identity.SignIn"], L["Description:Identity.SignIn"]); signinSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation, providerName, providerKey), ValueType.Boolean); signinSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, providerName, providerKey), ValueType.Boolean); signinSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, providerName, providerKey), ValueType.Boolean); #endregion #region 密码 var passwordSetting = identitySetting.AddSetting(L["DisplayName:Identity.Password"], L["Description:Identity.Password"]); passwordSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireDigit), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireDigit, providerName, providerKey), ValueType.Boolean); passwordSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredLength), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength, providerName, providerKey), ValueType.Number); passwordSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredUniqueChars), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredUniqueChars, providerName, providerKey), ValueType.Number); passwordSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireLowercase), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireLowercase, providerName, providerKey), ValueType.Boolean); passwordSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireUppercase), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireUppercase, providerName, providerKey), ValueType.Boolean); passwordSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, providerName, providerKey), ValueType.Boolean); #endregion #region 双因素 var twoFactorSetting = identitySetting.AddSetting(L["DisplayName:Identity.TwoFactor"], L["Description:Identity.TwoFactor"]); twoFactorSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.Behaviour), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.Behaviour, providerName, providerKey), ValueType.Option) .AddOption(IdentityTwoFactorBehaviour.Optional.ToString(), IdentityTwoFactorBehaviour.Optional.ToString()) .AddOption(IdentityTwoFactorBehaviour.Forced.ToString(), IdentityTwoFactorBehaviour.Forced.ToString()) .AddOption(IdentityTwoFactorBehaviour.Disabled.ToString(), IdentityTwoFactorBehaviour.Disabled.ToString()); twoFactorSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.UsersCanChange), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.UsersCanChange, providerName, providerKey), ValueType.Boolean); #endregion #region 组织机构 var ouSetting = identitySetting.AddSetting(L["DisplayName:Identity.OrganizationUnit"], L["Description:Identity.OrganizationUnit"]); ouSetting.AddDetail( SettingDefinitionManager.Get(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount), StringLocalizerFactory, await SettingManager.GetOrNullAsync(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount, providerName, providerKey), ValueType.Number); settingGroups.Add(identitySetting); #endregion #endregion #region 邮件设置 var emailSettingGroup = new SettingGroupDto(L["DisplayName:Emailing"], L["Description:Emailing"]); var defaultMailSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Default"], L["Description:Emailing.Default"]); defaultMailSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.DefaultFromAddress), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromAddress, providerName, providerKey), ValueType.String); defaultMailSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.DefaultFromDisplayName), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName, providerName, providerKey), ValueType.String); var smtpSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Smtp"], L["Description:Emailing.Smtp"]); smtpSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.Smtp.EnableSsl), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.EnableSsl, providerName, providerKey), ValueType.Boolean); smtpSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.Smtp.UseDefaultCredentials), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials, providerName, providerKey), ValueType.Boolean); smtpSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.Smtp.Domain), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Domain, providerName, providerKey), ValueType.String); smtpSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.Smtp.Host), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Host, providerName, providerKey), ValueType.String); smtpSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.Smtp.Port), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Port, providerName, providerKey), ValueType.Number); smtpSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.Smtp.UserName), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UserName, providerName, providerKey), ValueType.String); smtpSetting.AddDetail( SettingDefinitionManager.Get(EmailSettingNames.Smtp.Password), StringLocalizerFactory, await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Password, providerName, providerKey), ValueType.String); settingGroups.Add(emailSettingGroup); #endregion #region 文件设置 var fileSettingGroup = new SettingGroupDto(L["DisplayName:FileManagement"], L["Description:FileManagement"]); var fileSystemSetting = fileSettingGroup.AddSetting(L["DisplayName:FileManagement.FileSystem"], L["Description:FileManagement.FileSystem"]); fileSystemSetting.AddDetail( SettingDefinitionManager.Get(AbpFileManagementSettingNames.FileLimitLength), StringLocalizerFactory, await SettingManager.GetOrNullAsync(AbpFileManagementSettingNames.FileLimitLength, providerName, providerKey), ValueType.Number); fileSystemSetting.AddDetail( SettingDefinitionManager.Get(AbpFileManagementSettingNames.AllowFileExtensions), StringLocalizerFactory, await SettingManager.GetOrNullAsync(AbpFileManagementSettingNames.AllowFileExtensions, providerName, providerKey), ValueType.String); settingGroups.Add(fileSettingGroup); #endregion return(new ListResultDto <SettingGroupDto>(settingGroups)); }