Browse Source

enhanced Settings Management

5.0.0-rc.1
cKey 4 years ago
parent
commit
9c933a05db
  1. 59
      aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun.SettingManagement/LINGYUN/Abp/Aliyun/SettingManagement/AliyunSettingAppService.cs
  2. 4
      aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun.SettingManagement/LINGYUN/Abp/Aliyun/SettingManagement/AliyunSettingController.cs
  3. 7
      aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun.SettingManagement/LINGYUN/Abp/Aliyun/SettingManagement/IAliyunSettingAppService.cs
  4. 48
      aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun/LINGYUN/Abp/Aliyun/Settings/AliyunSettingProvider.cs
  5. 40
      aspnet-core/modules/common/LINGYUN.Abp.Sms.Aliyun/LINGYUN/Abp/Sms/Aliyun/Settings/AliyunSmsSettingProvider.cs
  6. 1
      aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingDefinitionProvider.cs
  7. 2
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs
  8. 7
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/IOssManagementSettingAppService.cs
  9. 15
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingAppService.cs
  10. 5
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingController.cs
  11. 2
      aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Settings/PlatformSettingDefinitionProvider.cs
  12. 2
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDetailsDto.cs
  13. 20
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDto.cs
  14. 23
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingGroupResult.cs
  15. 12
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/IReadonlySettingAppService.cs
  16. 8
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs
  17. 12
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/IUserSettingAppService.cs
  18. 1
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN.Abp.SettingManagement.Application.csproj
  19. 129
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs
  20. 247
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/UserSettingAppService.cs
  21. 5
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs
  22. 35
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/UserSettingController.cs
  23. 22
      aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingDefinitionProvider.cs
  24. 28
      aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingDefinitionProvider.cs
  25. 7
      aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/IWeChatSettingAppService.cs
  26. 45
      aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs
  27. 5
      aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs
  28. 4
      aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Settings/WeChatSettingDefinitionProvider.cs
  29. 14
      aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs

59
aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun.SettingManagement/LINGYUN/Abp/Aliyun/SettingManagement/AliyunSettingAppService.cs

@ -2,9 +2,7 @@
using LINGYUN.Abp.Aliyun.Settings;
using LINGYUN.Abp.SettingManagement;
using LINGYUN.Abp.Sms.Aliyun.Settings;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.MultiTenancy;
@ -31,19 +29,19 @@ namespace LINGYUN.Abp.Aliyun.SettingManagement
LocalizationResource = typeof(AliyunResource);
}
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString());
}
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null);
}
protected virtual async Task<ListResultDto<SettingGroupDto>> GetAllForProviderAsync(string providerName, string providerKey)
protected virtual async Task<SettingGroupResult> GetAllForProviderAsync(string providerName, string providerKey)
{
var settingGroups = new List<SettingGroupDto>();
var settingGroups = new SettingGroupResult();
// 无权限返回空结果,直接报错的话,网关聚合会抛出异常
if (await PermissionChecker.IsGrantedAsync(AliyunSettingPermissionNames.Settings))
@ -57,42 +55,50 @@ namespace LINGYUN.Abp.Aliyun.SettingManagement
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.RegionId),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.RegionId, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
ramSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.AccessKeyId),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.AccessKeyId, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
ramSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.AccessKeySecret),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.AccessKeySecret, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
ramSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.RamRoleArn),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.RamRoleArn, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
ramSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.RoleSessionName),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.RoleSessionName, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
ramSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.Policy),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.Policy, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
ramSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.UseSecurityTokenService),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.UseSecurityTokenService, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
ramSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSettingNames.Authorization.DurationSeconds),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSettingNames.Authorization.DurationSeconds, providerName, providerKey),
ValueType.Number);
ValueType.Number,
providerName);
#endregion
@ -103,44 +109,51 @@ namespace LINGYUN.Abp.Aliyun.SettingManagement
SettingDefinitionManager.Get(AliyunSmsSettingNames.Sms.Domain),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSmsSettingNames.Sms.Domain, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smsSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSmsSettingNames.Sms.Version),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSmsSettingNames.Sms.Version, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smsSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSmsSettingNames.Sms.ActionName),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSmsSettingNames.Sms.ActionName, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smsSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSmsSettingNames.Sms.DefaultPhoneNumber),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSmsSettingNames.Sms.DefaultPhoneNumber, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smsSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSmsSettingNames.Sms.DefaultSignName),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSmsSettingNames.Sms.DefaultSignName, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smsSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSmsSettingNames.Sms.DefaultTemplateCode),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSmsSettingNames.Sms.DefaultTemplateCode, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smsSetting.AddDetail(
SettingDefinitionManager.Get(AliyunSmsSettingNames.Sms.VisableErrorToClient),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AliyunSmsSettingNames.Sms.VisableErrorToClient, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
#endregion
settingGroups.Add(aliyunSettingGroup);
settingGroups.AddGroup(aliyunSettingGroup);
}
return new ListResultDto<SettingGroupDto>(settingGroups);
return settingGroups;
}
}
}

4
aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun.SettingManagement/LINGYUN/Abp/Aliyun/SettingManagement/AliyunSettingController.cs

@ -22,14 +22,14 @@ namespace LINGYUN.Abp.Aliyun.SettingManagement
[HttpGet]
[Route("by-current-tenant")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await AppService.GetAllForCurrentTenantAsync();
}
[HttpGet]
[Route("by-global")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await AppService.GetAllForGlobalAsync();
}

7
aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun.SettingManagement/LINGYUN/Abp/Aliyun/SettingManagement/IAliyunSettingAppService.cs

@ -1,13 +1,8 @@
using LINGYUN.Abp.SettingManagement;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.Aliyun.SettingManagement
{
public interface IAliyunSettingAppService
public interface IAliyunSettingAppService : IReadonlySettingAppService
{
Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync();
Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync();
}
}

48
aspnet-core/modules/cloud-aliyun/LINGYUN.Abp.Aliyun/LINGYUN/Abp/Aliyun/Settings/AliyunSettingProvider.cs

@ -21,55 +21,87 @@ namespace LINGYUN.Abp.Aliyun.Settings
description: L("Description:AccessKeyId"),
isVisibleToClients: false,
isEncrypted: true
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSettingNames.Authorization.AccessKeySecret,
displayName: L("DisplayName:AccessKeySecret"),
description: L("Description:AccessKeySecret"),
isVisibleToClients: false,
isEncrypted: true
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSettingNames.Authorization.DurationSeconds,
defaultValue: "3600",
displayName: L("DisplayName:DurationSeconds"),
description: L("Description:DurationSeconds"),
isVisibleToClients: false
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSettingNames.Authorization.Policy,
displayName: L("DisplayName:Policy"),
description: L("Description:Policy"),
isVisibleToClients: false,
isEncrypted: true
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSettingNames.Authorization.RamRoleArn,
displayName: L("DisplayName:RamRoleArn"),
description: L("Description:RamRoleArn"),
isVisibleToClients: false,
isEncrypted: true
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSettingNames.Authorization.RegionId,
displayName: L("DisplayName:RegionId"),
description: L("Description:RegionId"),
isVisibleToClients: false
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSettingNames.Authorization.RoleSessionName,
displayName: L("DisplayName:RoleSessionName"),
description: L("Description:RoleSessionName"),
isVisibleToClients: false,
isEncrypted: true
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSettingNames.Authorization.UseSecurityTokenService,
defaultValue: true.ToString(),
displayName: L("DisplayName:UseSecurityTokenService"),
description: L("Description:UseSecurityTokenService"),
isVisibleToClients: false
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
};
}

40
aspnet-core/modules/common/LINGYUN.Abp.Sms.Aliyun/LINGYUN/Abp/Sms/Aliyun/Settings/AliyunSmsSettingProvider.cs

@ -21,41 +21,65 @@ namespace LINGYUN.Abp.Sms.Aliyun.Settings
displayName: L("DisplayName:ActionName"),
description: L("Description:ActionName"),
isVisibleToClients: false
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSmsSettingNames.Sms.DefaultSignName,
displayName: L("DisplayName:DefaultSignName"),
description: L("Description:DefaultSignName"),
isVisibleToClients: false,
isEncrypted: true
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSmsSettingNames.Sms.DefaultTemplateCode,
displayName: L("DisplayName:DefaultTemplateCode"),
description: L("Description:DefaultTemplateCode"),
isVisibleToClients: false,
isEncrypted: true
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSmsSettingNames.Sms.DefaultPhoneNumber,
displayName: L("DisplayName:DefaultPhoneNumber"),
description: L("Description:DefaultPhoneNumber"),
isVisibleToClients: false
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSmsSettingNames.Sms.Domain,
defaultValue: "dysmsapi.aliyuncs.com",
displayName: L("DisplayName:Domain"),
description: L("Description:Domain"),
isVisibleToClients: false
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSmsSettingNames.Sms.Version,
defaultValue: "2017-05-25",
displayName: L("DisplayName:Version"),
description: L("Description:Version"),
isVisibleToClients: false
),
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
AliyunSmsSettingNames.Sms.VisableErrorToClient,
defaultValue: false.ToString(),
@ -63,6 +87,10 @@ namespace LINGYUN.Abp.Sms.Aliyun.Settings
description: L("Description:VisableErrorToClient"),
isVisibleToClients: false
)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName)
};
}

1
aspnet-core/modules/message/LINGYUN.Abp.MessageService.Domain.Shared/LINGYUN/Abp/MessageService/Settings/MessageServiceSettingDefinitionProvider.cs

@ -17,6 +17,7 @@ namespace LINGYUN.Abp.MessageService.Settings
isVisibleToClients: false,
isEncrypted: false)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName)
);

2
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs

@ -22,6 +22,7 @@ namespace LINGYUN.Abp.OssManagement.Settings
description: L("Description:FileLimitLength"),
isVisibleToClients: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
@ -31,6 +32,7 @@ namespace LINGYUN.Abp.OssManagement.Settings
description: L("Description:AllowFileExtensions"),
isVisibleToClients: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
};

7
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/IOssManagementSettingAppService.cs

@ -1,13 +1,8 @@
using LINGYUN.Abp.SettingManagement;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.OssManagement.SettingManagement
{
public interface IOssManagementSettingAppService
public interface IOssManagementSettingAppService : IReadonlySettingAppService
{
Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync();
Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync();
}
}

15
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingAppService.cs

@ -2,9 +2,7 @@
using LINGYUN.Abp.OssManagement.Permissions;
using LINGYUN.Abp.OssManagement.Settings;
using LINGYUN.Abp.SettingManagement;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.MultiTenancy;
@ -31,24 +29,23 @@ namespace LINGYUN.Abp.OssManagement.SettingManagement
LocalizationResource = typeof(AbpOssManagementResource);
}
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString());
}
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null);
}
protected virtual async Task<ListResultDto<SettingGroupDto>> GetAllForProviderAsync(string providerName, string providerKey)
protected virtual async Task<SettingGroupResult> GetAllForProviderAsync(string providerName, string providerKey)
{
var settingGroups = new List<SettingGroupDto>();
var settingGroups = new SettingGroupResult();
// 无权限返回空结果,直接报错的话,网关聚合会抛出异常
if (await PermissionChecker.IsGrantedAsync(AbpOssManagementPermissions.OssObject.Default))
{
var ossSettingGroup = new SettingGroupDto(L["DisplayName:OssManagement"], L["Description:OssManagement"]);
var ossObjectSetting = ossSettingGroup.AddSetting(L["DisplayName:OssObject"], L["Description:OssObject"]);
@ -64,10 +61,10 @@ namespace LINGYUN.Abp.OssManagement.SettingManagement
await SettingManager.GetOrNullAsync(AbpOssManagementSettingNames.AllowFileExtensions, providerName, providerKey),
ValueType.String);
settingGroups.Add(ossSettingGroup);
settingGroups.AddGroup(ossSettingGroup);
}
return new ListResultDto<SettingGroupDto>(settingGroups);
return settingGroups;
}
}
}

5
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingController.cs

@ -2,7 +2,6 @@
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
namespace LINGYUN.Abp.OssManagement.SettingManagement
@ -22,14 +21,14 @@ namespace LINGYUN.Abp.OssManagement.SettingManagement
[HttpGet]
[Route("by-current-tenant")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await WeChatSettingAppService.GetAllForCurrentTenantAsync();
}
[HttpGet]
[Route("by-global")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await WeChatSettingAppService.GetAllForGlobalAsync();
}

2
aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Settings/PlatformSettingDefinitionProvider.cs

@ -23,6 +23,7 @@ namespace LINGYUN.Platform.Settings
description: L("Description:VersionFileLimitLength"),
isVisibleToClients: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
@ -32,6 +33,7 @@ namespace LINGYUN.Platform.Settings
description: L("Description:AllowVersionFileExtensions"),
isVisibleToClients: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
};

2
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDetailsDto.cs

@ -26,6 +26,8 @@ namespace LINGYUN.Abp.SettingManagement
/// </summary>
public List<OptionDto> Options { get; set; } = new List<OptionDto>();
public List<string> Providers { get; set; } = new List<string>();
public SettingDetailsDto WithSlot(string slot)
{
Slot = slot;

20
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDto.cs

@ -1,5 +1,7 @@
using Microsoft.Extensions.Localization;
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.Settings;
namespace LINGYUN.Abp.SettingManagement
@ -12,6 +14,8 @@ namespace LINGYUN.Abp.SettingManagement
public List<SettingDetailsDto> Details { get; set; } = new List<SettingDetailsDto>();
public SettingDto()
{
@ -23,8 +27,20 @@ namespace LINGYUN.Abp.SettingManagement
Description = description;
}
public SettingDetailsDto AddDetail(SettingDefinition setting, IStringLocalizerFactory factory, string value, ValueType type)
#nullable enable
public SettingDetailsDto? AddDetail(
SettingDefinition setting,
IStringLocalizerFactory factory,
string value,
ValueType type,
string keepProvider = "")
{
if (setting.Providers.Any() &&
!keepProvider.IsNullOrWhiteSpace() &&
!setting.Providers.Any(p => p.Equals(keepProvider)))
{
return null;
}
var detail = new SettingDetailsDto()
{
DefaultValue = setting.DefaultValue,
@ -35,9 +51,11 @@ namespace LINGYUN.Abp.SettingManagement
Value = value,
ValueType = type
};
detail.Providers.AddRange(setting.Providers);
Details.Add(detail);
return detail;
}
}
#nullable disable
}

23
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingGroupResult.cs

@ -0,0 +1,23 @@
using System.Collections.Generic;
using System.Linq;
namespace LINGYUN.Abp.SettingManagement
{
public class SettingGroupResult
{
public IList<SettingGroupDto> Items { get; }
public SettingGroupResult()
{
Items = new List<SettingGroupDto>();
}
public void AddGroup(SettingGroupDto group)
{
if (group.Settings.Any(g => g.Details.Any()))
{
Items.Add(group);
}
}
}
}

12
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/IReadonlySettingAppService.cs

@ -0,0 +1,12 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.SettingManagement
{
public interface IReadonlySettingAppService : IApplicationService
{
Task<SettingGroupResult> GetAllForGlobalAsync();
Task<SettingGroupResult> GetAllForCurrentTenantAsync();
}
}

8
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs

@ -1,17 +1,11 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.SettingManagement
{
public interface ISettingAppService : IApplicationService
public interface ISettingAppService : IReadonlySettingAppService
{
Task SetGlobalAsync(UpdateSettingsDto input);
Task SetCurrentTenantAsync(UpdateSettingsDto input);
Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync();
Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync();
}
}

12
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/IUserSettingAppService.cs

@ -0,0 +1,12 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace LINGYUN.Abp.SettingManagement
{
public interface IUserSettingAppService : IApplicationService
{
Task SetCurrentUserAsync(UpdateSettingsDto input);
Task<SettingGroupResult> GetAllForCurrentUserAsync();
}
}

1
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN.Abp.SettingManagement.Application.csproj

@ -5,6 +5,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>

129
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs

@ -1,13 +1,14 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Account.Settings;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.Caching;
using Volo.Abp.Emailing;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Features;
using Volo.Abp.Identity.Settings;
using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
@ -16,9 +17,6 @@ using Volo.Abp.SettingManagement.Localization;
using Volo.Abp.Settings;
using Volo.Abp.Timing;
using Volo.Abp.Users;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.Features;
namespace LINGYUN.Abp.SettingManagement
{
@ -92,18 +90,18 @@ namespace LINGYUN.Abp.SettingManagement
//[Authorize]
[AllowAnonymous]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString());
}
[AllowAnonymous]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null);
}
protected virtual async Task<ListResultDto<SettingGroupDto>> GetAllForProviderAsync(string providerName, string providerKey)
protected virtual async Task<SettingGroupResult> GetAllForProviderAsync(string providerName, string providerKey)
{
/*
* 2020-11-19
@ -117,7 +115,9 @@ namespace LINGYUN.Abp.SettingManagement
* ,,
*/
var settingGroups = new List<SettingGroupDto>();
// 2021-12-11 重新约定返回格式, 当用户明确只需要对应提供者设置才返回,否则为空数组
var settingGroups = new SettingGroupResult();
#region 系统设置
@ -128,16 +128,18 @@ namespace LINGYUN.Abp.SettingManagement
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)));
ValueType.Option,
providerName)
?.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);
ValueType.String,
providerName);
settingGroups.AddGroup(sysSettingGroup);
#endregion
@ -152,14 +154,16 @@ namespace LINGYUN.Abp.SettingManagement
SettingDefinitionManager.Get(AccountSettingNames.EnableLocalLogin),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AccountSettingNames.EnableLocalLogin, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
accountSetting.AddDetail(
SettingDefinitionManager.Get(AccountSettingNames.IsSelfRegistrationEnabled),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
settingGroups.Add(securitySettingGroup);
settingGroups.AddGroup(securitySettingGroup);
#endregion
@ -175,17 +179,20 @@ namespace LINGYUN.Abp.SettingManagement
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.AllowedForNewUsers),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
lockoutSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.LockoutDuration),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.LockoutDuration, providerName, providerKey),
ValueType.Number);
ValueType.Number,
providerName);
lockoutSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, providerName, providerKey),
ValueType.Number);
ValueType.Number,
providerName);
#endregion
@ -196,37 +203,44 @@ namespace LINGYUN.Abp.SettingManagement
SettingDefinitionManager.Get(IdentitySettingNames.User.IsEmailUpdateEnabled),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsEmailUpdateEnabled, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
userSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.User.IsUserNameUpdateEnabled),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
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);
ValueType.String,
providerName);
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);
ValueType.String,
providerName);
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);
ValueType.String,
providerName);
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);
ValueType.String,
providerName);
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);
ValueType.Number,
providerName);
#endregion
@ -237,17 +251,20 @@ namespace LINGYUN.Abp.SettingManagement
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
signinSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
signinSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
#endregion
@ -258,32 +275,38 @@ namespace LINGYUN.Abp.SettingManagement
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireDigit),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireDigit, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredLength),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength, providerName, providerKey),
ValueType.Number);
ValueType.Number,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredUniqueChars),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredUniqueChars, providerName, providerKey),
ValueType.Number);
ValueType.Number,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireLowercase),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireLowercase, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireUppercase),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireUppercase, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
#endregion
@ -314,9 +337,10 @@ namespace LINGYUN.Abp.SettingManagement
SettingDefinitionManager.Get(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount, providerName, providerKey),
ValueType.Number);
ValueType.Number,
providerName);
settingGroups.Add(identitySetting);
settingGroups.AddGroup(identitySetting);
#endregion
@ -330,55 +354,64 @@ namespace LINGYUN.Abp.SettingManagement
SettingDefinitionManager.Get(EmailSettingNames.DefaultFromAddress),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromAddress, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
defaultMailSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.DefaultFromDisplayName),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
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);
ValueType.Boolean,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UseDefaultCredentials),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Domain),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Domain, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Host),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Host, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Port),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Port, providerName, providerKey),
ValueType.Number);
ValueType.Number,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UserName),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UserName, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Password),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Password, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
settingGroups.Add(emailSettingGroup);
settingGroups.AddGroup(emailSettingGroup);
#endregion
return new ListResultDto<SettingGroupDto>(settingGroups);
return settingGroups;
}
protected virtual async Task CheckFeatureAsync()

247
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/UserSettingAppService.cs

@ -0,0 +1,247 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.Caching;
using Volo.Abp.Emailing;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Features;
using Volo.Abp.Identity.Settings;
using Volo.Abp.Localization;
using Volo.Abp.SettingManagement;
using Volo.Abp.SettingManagement.Localization;
using Volo.Abp.Settings;
using Volo.Abp.Timing;
using Volo.Abp.Users;
namespace LINGYUN.Abp.SettingManagement
{
[Authorize]
public class UserSettingAppService : ApplicationService, IUserSettingAppService
{
protected AbpLocalizationOptions LocalizationOptions { get; }
protected IDistributedEventBus EventBus { get; }
protected ISettingManager SettingManager { get; }
protected ISettingDefinitionManager SettingDefinitionManager { get; }
protected IDistributedCache<SettingCacheItem> Cache { get; }
public UserSettingAppService(
IDistributedEventBus eventBus,
ISettingManager settingManager,
IDistributedCache<SettingCacheItem> cache,
IOptions<AbpLocalizationOptions> localizationOptions,
ISettingDefinitionManager settingDefinitionManager)
{
Cache = cache;
EventBus = eventBus;
SettingManager = settingManager;
SettingDefinitionManager = settingDefinitionManager;
LocalizationOptions = localizationOptions.Value;
LocalizationResource = typeof(AbpSettingManagementResource);
}
public virtual async Task SetCurrentUserAsync(UpdateSettingsDto input)
{
// 增加特性检查
await CheckFeatureAsync();
foreach (var setting in input.Settings)
{
await SettingManager.SetForCurrentUserAsync(setting.Name, setting.Value);
}
CurrentUnitOfWork.OnCompleted(async () =>
{
// 发送刷新用户缓存事件
await EventBus.PublishAsync(new CurrentApplicationConfigurationCacheResetEventData());
});
await CurrentUnitOfWork.SaveChangesAsync();
}
public virtual async Task<SettingGroupResult> GetAllForCurrentUserAsync()
{
return await GetAllForProviderAsync(UserSettingValueProvider.ProviderName, CurrentUser.GetId().ToString());
}
protected virtual async Task<SettingGroupResult> GetAllForProviderAsync(string providerName, string providerKey)
{
var settingGroups = new SettingGroupResult();
#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,
providerName)
?.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,
providerName);
settingGroups.AddGroup(sysSettingGroup);
#endregion
#region 身份标识设置
// 身份标识设置
var identitySetting = new SettingGroupDto(L["DisplayName:Identity"], L["Description:Identity"]);
#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,
providerName);
signinSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, providerName, providerKey),
ValueType.Boolean,
providerName);
signinSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, providerName, providerKey),
ValueType.Boolean,
providerName);
#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,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredLength),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength, providerName, providerKey),
ValueType.Number,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredUniqueChars),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredUniqueChars, providerName, providerKey),
ValueType.Number,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireLowercase),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireLowercase, providerName, providerKey),
ValueType.Boolean,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireUppercase),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireUppercase, providerName, providerKey),
ValueType.Boolean,
providerName);
passwordSetting.AddDetail(
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, providerName, providerKey),
ValueType.Boolean,
providerName);
#endregion
settingGroups.AddGroup(identitySetting);
#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,
providerName);
defaultMailSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.DefaultFromDisplayName),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName, providerName, providerKey),
ValueType.String,
providerName);
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,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UseDefaultCredentials),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials, providerName, providerKey),
ValueType.Boolean,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Domain),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Domain, providerName, providerKey),
ValueType.String,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Host),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Host, providerName, providerKey),
ValueType.String,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Port),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Port, providerName, providerKey),
ValueType.Number,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UserName),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UserName, providerName, providerKey),
ValueType.String,
providerName);
smtpSetting.AddDetail(
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Password),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Password, providerName, providerKey),
ValueType.String,
providerName);
settingGroups.AddGroup(emailSettingGroup);
#endregion
return settingGroups;
}
protected virtual async Task CheckFeatureAsync()
{
await FeatureChecker.CheckEnabledAsync(SettingManagementFeatures.Enable);
}
}
}

5
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs

@ -1,7 +1,6 @@
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
namespace LINGYUN.Abp.SettingManagement
@ -33,14 +32,14 @@ namespace LINGYUN.Abp.SettingManagement
[HttpGet]
[Route("by-global")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await _settingAppService.GetAllForGlobalAsync();
}
[HttpGet]
[Route("by-current-tenant")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await _settingAppService.GetAllForCurrentTenantAsync();
}

35
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/UserSettingController.cs

@ -0,0 +1,35 @@
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
namespace LINGYUN.Abp.SettingManagement
{
[RemoteService(Name = AbpSettingManagementRemoteServiceConsts.RemoteServiceName)]
[Area("settingManagement")]
[Route("api/setting-management/settings")]
public class UserSettingController : AbpController, IUserSettingAppService
{
private readonly IUserSettingAppService _service;
public UserSettingController(
IUserSettingAppService service)
{
_service = service;
}
[HttpGet]
[Route("by-current-user")]
public virtual async Task<SettingGroupResult> GetAllForCurrentUserAsync()
{
return await _service.GetAllForCurrentUserAsync();
}
[HttpPut]
[Route("change-current-user")]
public virtual async Task SetCurrentUserAsync(UpdateSettingsDto input)
{
await _service.SetCurrentUserAsync(input);
}
}
}

22
aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingDefinitionProvider.cs

@ -14,25 +14,41 @@ namespace LINGYUN.Abp.WeChat.MiniProgram.Settings
L("DisplayName:WeChat.MiniProgram.AppId"),
L("Description:WeChat.MiniProgram.AppId"),
isVisibleToClients: false,
isEncrypted: true),
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
WeChatMiniProgramSettingNames.AppSecret, "",
L("DisplayName:WeChat.MiniProgram.AppSecret"),
L("Description:WeChat.MiniProgram.AppSecret"),
isVisibleToClients: false,
isEncrypted: true),
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
WeChatMiniProgramSettingNames.Token, "",
L("DisplayName:WeChat.MiniProgram.Token"),
L("Description:WeChat.MiniProgram.Token"),
isVisibleToClients: false,
isEncrypted: true),
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
WeChatMiniProgramSettingNames.EncodingAESKey, "",
L("DisplayName:WeChat.MiniProgram.EncodingAESKey"),
L("Description:WeChat.MiniProgram.EncodingAESKey"),
isVisibleToClients: false,
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName)
);
}

28
aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingDefinitionProvider.cs

@ -14,31 +14,51 @@ namespace LINGYUN.Abp.WeChat.Official.Settings
L("DisplayName:WeChat.Official.AppId"),
L("Description:WeChat.Official.AppId"),
isVisibleToClients: false,
isEncrypted: true),
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
WeChatOfficialSettingNames.AppSecret, "",
L("DisplayName:WeChat.Official.AppSecret"),
L("Description:WeChat.Official.AppSecret"),
isVisibleToClients: false,
isEncrypted: true),
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
WeChatOfficialSettingNames.Url, "",
L("DisplayName:WeChat.Official.Url"),
L("Description:WeChat.Official.Url"),
isVisibleToClients: false,
isEncrypted: false),
isEncrypted: false)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
WeChatOfficialSettingNames.Token, "",
L("DisplayName:WeChat.Official.Token"),
L("Description:WeChat.Official.Token"),
isVisibleToClients: false,
isEncrypted: true),
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName),
new SettingDefinition(
WeChatOfficialSettingNames.EncodingAESKey, "",
L("DisplayName:WeChat.Official.EncodingAESKey"),
L("Description:WeChat.Official.EncodingAESKey"),
isVisibleToClients: false,
isEncrypted: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName)
);
}

7
aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/IWeChatSettingAppService.cs

@ -1,13 +1,8 @@
using LINGYUN.Abp.SettingManagement;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.WeChat.SettingManagement
{
public interface IWeChatSettingAppService
public interface IWeChatSettingAppService : IReadonlySettingAppService
{
Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync();
Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync();
}
}

45
aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs

@ -3,9 +3,7 @@ using LINGYUN.Abp.WeChat.Localization;
using LINGYUN.Abp.WeChat.MiniProgram.Settings;
using LINGYUN.Abp.WeChat.Official.Settings;
using LINGYUN.Abp.WeChat.Settings;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.MultiTenancy;
@ -31,19 +29,19 @@ namespace LINGYUN.Abp.WeChat.SettingManagement
LocalizationResource = typeof(WeChatResource);
}
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString());
}
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null);
}
protected virtual async Task<ListResultDto<SettingGroupDto>> GetAllForProviderAsync(string providerName, string providerKey)
protected virtual async Task<SettingGroupResult> GetAllForProviderAsync(string providerName, string providerKey)
{
var settingGroups = new List<SettingGroupDto>();
var settingGroups = new SettingGroupResult();
var wechatSettingGroup = new SettingGroupDto(L["DisplayName:WeChat"], L["Description:WeChat"]);
var loginSetting = wechatSettingGroup.AddSetting(L["UserLogin"], L["UserLogin"]);
@ -51,7 +49,8 @@ namespace LINGYUN.Abp.WeChat.SettingManagement
SettingDefinitionManager.Get(WeChatSettingNames.EnabledQuickLogin),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatSettingNames.EnabledQuickLogin, providerName, providerKey),
ValueType.Boolean);
ValueType.Boolean,
providerName);
// 无权限返回空结果,直接报错的话,网关聚合会抛出异常
if (await PermissionChecker.IsGrantedAsync(WeChatSettingPermissionNames.Official))
@ -63,27 +62,32 @@ namespace LINGYUN.Abp.WeChat.SettingManagement
SettingDefinitionManager.Get(WeChatOfficialSettingNames.AppId),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.AppId, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
officialSetting.AddDetail(
SettingDefinitionManager.Get(WeChatOfficialSettingNames.AppSecret),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.AppSecret, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
officialSetting.AddDetail(
SettingDefinitionManager.Get(WeChatOfficialSettingNames.Url),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.Url, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
officialSetting.AddDetail(
SettingDefinitionManager.Get(WeChatOfficialSettingNames.Token),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.Token, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
officialSetting.AddDetail(
SettingDefinitionManager.Get(WeChatOfficialSettingNames.EncodingAESKey),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.EncodingAESKey, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
#endregion
}
@ -97,28 +101,33 @@ namespace LINGYUN.Abp.WeChat.SettingManagement
SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.AppId),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.AppId, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
miniProgramSetting.AddDetail(
SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.AppSecret),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.AppSecret, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
miniProgramSetting.AddDetail(
SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.Token),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.Token, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
miniProgramSetting.AddDetail(
SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.EncodingAESKey),
StringLocalizerFactory,
await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.EncodingAESKey, providerName, providerKey),
ValueType.String);
ValueType.String,
providerName);
#endregion
}
settingGroups.Add(wechatSettingGroup);
return new ListResultDto<SettingGroupDto>(settingGroups);
settingGroups.AddGroup(wechatSettingGroup);
return settingGroups;
}
}
}

5
aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs

@ -2,7 +2,6 @@
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
namespace LINGYUN.Abp.WeChat.SettingManagement
@ -22,14 +21,14 @@ namespace LINGYUN.Abp.WeChat.SettingManagement
[HttpGet]
[Route("by-current-tenant")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync()
public virtual async Task<SettingGroupResult> GetAllForCurrentTenantAsync()
{
return await WeChatSettingAppService.GetAllForCurrentTenantAsync();
}
[HttpGet]
[Route("by-global")]
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync()
public virtual async Task<SettingGroupResult> GetAllForGlobalAsync()
{
return await WeChatSettingAppService.GetAllForGlobalAsync();
}

4
aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Settings/WeChatSettingDefinitionProvider.cs

@ -17,6 +17,10 @@ namespace LINGYUN.Abp.WeChat.Settings
L("Description:WeChat.EnabledQuickLogin"),
isVisibleToClients: true,
isEncrypted: false)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName)
);
}

14
aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs

@ -15,7 +15,12 @@ public class AccountSettingDefinitionProvider : SettingDefinitionProvider
AccountSettingNames.IsSelfRegistrationEnabled,
"true",
L("DisplayName:Abp.Account.IsSelfRegistrationEnabled"),
L("Description:Abp.Account.IsSelfRegistrationEnabled"), isVisibleToClients: true)
L("Description:Abp.Account.IsSelfRegistrationEnabled"),
isVisibleToClients: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName)
);
context.Add(
@ -23,7 +28,12 @@ public class AccountSettingDefinitionProvider : SettingDefinitionProvider
AccountSettingNames.EnableLocalLogin,
"true",
L("DisplayName:Abp.Account.EnableLocalLogin"),
L("Description:Abp.Account.EnableLocalLogin"), isVisibleToClients: true)
L("Description:Abp.Account.EnableLocalLogin"),
isVisibleToClients: true)
.WithProviders(
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName,
TenantSettingValueProvider.ProviderName)
);
}

Loading…
Cancel
Save