71 changed files with 1224 additions and 191 deletions
@ -0,0 +1,76 @@ |
|||||
|
# 10.2.0 - 10.4.0 |
||||
|
|
||||
|
## 模块变更 |
||||
|
|
||||
|
1. [身份标识模块] 增加不活跃用户通知/清理作业,实现了三个通知模板(账户保持活跃通知、账户停用通知、账户删除通知) |
||||
|
2. [身份标识模块] 增加不活跃用户实体 `IdentityUserInactive` 需要执行数据库迁移 |
||||
|
3. [身份标识模块] 增加用户登录Url设置定义: `Abp.Identity.Link.UserLoginUri`, 用于在外部系统中关联用户登录页 |
||||
|
4. [身份认证模块] 增加用户登录Url定义: `Abp.Account.UserLogin` |
||||
|
5. [身份认证模块] 增加关联用户登录功能, 可以实现跨租户用户关联, 切换关联用户登录 |
||||
|
6. [设置管理模块] 增加身份标识模块缺少的设置项: 启用防止密码重用、防止密码重用数量 |
||||
|
7. [设置基础模块] 增加设置定义分组、所属设置、优先级、依赖权限、依赖功能、选择项等常用结构扩展 |
||||
|
8. [设置管理模块] 重构设置管理应用服务接口, 通过预设定的设置定义分组、上下级关系等自动构成Dto结构 |
||||
|
|
||||
|
## 依赖项变更 |
||||
|
|
||||
|
| 库名称 | 原版本 | 现版本 | |
||||
|
| -------------------------------------------- | --------- | ------ | |
||||
|
| Microsoft.AspNetCore.* | 10.0.2 | 10.0.7 | |
||||
|
| Microsoft.Bcl.AsyncInterfaces | 10.0.2 | 10.0.7 | |
||||
|
| Microsoft.Data.Sqlite.Core | 10.0.0 | 10.0.7 | |
||||
|
| Microsoft.EntityFrameworkCore.* | 10.0.2 | 10.0.7 | |
||||
|
| Microting.EntityFrameworkCore.MySql | 10.0.3 | 10.0.7 | |
||||
|
| Microsoft.Extensions.* | 10.0.2 | 10.0.7 | |
||||
|
| OpenTelemetry.Extensions.Hosting | 1.14.0 | 1.15.3 | |
||||
|
| OpenTelemetry.Exporter.Console | 1.14.0 | 1.15.3 | |
||||
|
| OpenTelemetry.Exporter.OpenTelemetryProtocol | 1.14.0 | 1.15.3 | |
||||
|
| OpenTelemetry.Exporter.Zipkin | 1.14.0 | 1.15.3 | |
||||
|
| OpenTelemetry.Instrumentation.AspNetCore | 1.14.0 | 1.15.2 | |
||||
|
| OpenTelemetry.Instrumentation.Http | 1.14.0 | 1.15.1 | |
||||
|
| OpenTelemetry.Instrumentation.Quartz | 1.14.0-beta.2 | 1.15.1-beta.1 | |
||||
|
| OpenTelemetry.Instrumentation.Runtime | 1.14.0 | 1.15.1 | |
||||
|
| OpenTelemetry.Instrumentation.SqlClient | 1.14.0-beta.1 | 1.15.2 | |
||||
|
| OpenIddict.Server.DataProtection | 7.2.0 | 7.5.0 | |
||||
|
| OpenIddict.Validation.DataProtection | 7.2.0 | 7.5.0 | |
||||
|
| System.Threading.Channels | 10.0.0 | 10.0.7 | |
||||
|
| Volo.Abp.* | 10.2.0 | 10.4.0 | |
||||
|
| Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite | 5.2.0 | 5.4.0 | |
||||
|
|
||||
|
|
||||
|
|
||||
|
## 数据库迁移 |
||||
|
|
||||
|
| Project Name | Database Provider | Scripts | EF Core Version | |
||||
|
| ------------------------ | ----------------- | ---------------------------------------------- | --------------- | |
||||
|
| aspire/AuthServer | PostgreSQL | 20260530060327_Add-Identity-User-Inactive | 10.0.2 | |
||||
|
| services/Single | MySQL | 20260529063257_Add-Identity-User-Inactive | 10.0.3 | |
||||
|
| services/Single | PostgreSQL | 20260530055941_Add-Identity-User-Inactive | 10.0.2 | |
||||
|
| services/Single | SqlServer | 20260530060009_Add-Identity-User-Inactive | 10.0.2 | |
||||
|
| services/AuthServer | MySQL | 20260530061141_Add-Identity-User-Inactive | 10.0.3 | |
||||
|
|
||||
|
|
||||
|
## 数据库连接字符串 |
||||
|
|
||||
|
| Module Name | ConnectionString Name | Example(MySQL) | |
||||
|
| ----------------------------- | ---------------------------- | ------------------------------------------------------------ | |
||||
|
| Default | Default | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| abp/Identity | AbpIdentity | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| abp/IdentityServer | AbpIdentityServer | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| abp/OpenIddict | AbpOpenIddict | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| abp/TenantManagement | AbpTenantManagement(AbpSaas) | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| abp/FeatureManagement | AbpFeatureManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| abp/SettingManagement | AbpSettingManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| abp/PermissionManagement | AbpPermissionManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/AIManagement | AbpAIManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/BlobManagement | AbpBlobManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/DataProtectionManagement | AbpDataProtectionManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/Gdpr | AbpGdpr | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/Saas | AbpSaas | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/LocalizationManagement | AbpLocalizationManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/TextTemplating | AbpTextTemplating | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/Platform | AppPlatform | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/MessageService | MessageService | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/NotificationService | Notifications | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/TaskManagement | TaskManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/WebhooksManagement | WebhooksManagement | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
|
| labp/Elsa | Workflow | Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None | |
||||
@ -0,0 +1,2 @@ |
|||||
|
/** 启用企业微信认证 */ |
||||
|
export const WeixinWorkAuthEnable = 'Abp.Account.OAuth.WeCom.Enable'; |
||||
@ -1,9 +1,9 @@ |
|||||
{ |
{ |
||||
"version": "10.2.0", |
"version": "10.4.0", |
||||
"name": "my-app-authserver", |
"name": "aspire-authserver", |
||||
"private": true, |
"private": true, |
||||
"dependencies": { |
"dependencies": { |
||||
"@abp/aspnetcore.mvc.ui.theme.leptonxlite": "5.2.0", |
"@abp/aspnetcore.mvc.ui.theme.leptonxlite": "5.4.0", |
||||
"@abp/qrcode": "10.2.0" |
"@abp/qrcode": "10.4.0" |
||||
} |
} |
||||
} |
} |
||||
@ -0,0 +1,120 @@ |
|||||
|
using LINGYUN.Abp.Notifications; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
using Microsoft.Extensions.Logging.Abstractions; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
using Volo.Abp.Users; |
||||
|
|
||||
|
namespace LINGYUN.Abp.MicroService.MessageService.DataSeeds; |
||||
|
|
||||
|
public class NotificationDataSeeder : ITransientDependency |
||||
|
{ |
||||
|
public ILogger<NotificationDataSeeder> Logger { protected get; set; } |
||||
|
protected INotificationSender NotificationSender { get; } |
||||
|
protected INotificationSubscriptionManager NotificationSubscriptionManager { get; } |
||||
|
public NotificationDataSeeder( |
||||
|
INotificationSender notificationSender, |
||||
|
INotificationSubscriptionManager notificationSubscriptionManager) |
||||
|
{ |
||||
|
NotificationSender = notificationSender; |
||||
|
NotificationSubscriptionManager = notificationSubscriptionManager; |
||||
|
|
||||
|
Logger = NullLogger<NotificationDataSeeder>.Instance; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task SeedAsync(DataSeedContext context) |
||||
|
{ |
||||
|
await SubscribeDefaultNotifierAsync(context); |
||||
|
await SeedWelcomeNotifierAsync(context); |
||||
|
} |
||||
|
|
||||
|
public async virtual Task SubscribeDefaultNotifierAsync(DataSeedContext context) |
||||
|
{ |
||||
|
if (!context.Properties.TryGetValue(MessageServiceDataSeedConsts.AdminUserIdPropertyName, out var userIdString) || |
||||
|
!Guid.TryParse(userIdString?.ToString(), out var adminUserId)) |
||||
|
{ |
||||
|
|
||||
|
return; |
||||
|
} |
||||
|
var adminUserName = context.Properties.GetOrDefault(MessageServiceDataSeedConsts.AdminUserNamePropertyName)?.ToString() |
||||
|
?? MessageServiceDataSeedConsts.AdminUserNameDefaultValue; |
||||
|
var userIdentifer = new UserIdentifier(adminUserId, adminUserName); |
||||
|
// 订阅内置通知
|
||||
|
await NotificationSubscriptionManager |
||||
|
.SubscribeAsync( |
||||
|
context.TenantId, |
||||
|
userIdentifer, |
||||
|
DefaultNotifications.SystemNotice); |
||||
|
await NotificationSubscriptionManager |
||||
|
.SubscribeAsync( |
||||
|
context.TenantId, |
||||
|
userIdentifer, |
||||
|
DefaultNotifications.OnsideNotice); |
||||
|
await NotificationSubscriptionManager |
||||
|
.SubscribeAsync( |
||||
|
context.TenantId, |
||||
|
userIdentifer, |
||||
|
DefaultNotifications.ActivityNotice); |
||||
|
// 订阅用户欢迎消息
|
||||
|
await NotificationSubscriptionManager |
||||
|
.SubscribeAsync( |
||||
|
context.TenantId, |
||||
|
userIdentifer, |
||||
|
UserNotificationNames.WelcomeToApplication); |
||||
|
} |
||||
|
|
||||
|
public async virtual Task SeedWelcomeNotifierAsync(DataSeedContext context) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
if (!context.TenantId.HasValue) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
if (!context.Properties.TryGetValue(MessageServiceDataSeedConsts.AdminUserIdPropertyName, out var userIdString) || |
||||
|
!Guid.TryParse(userIdString?.ToString(), out var adminUserId)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
var adminEmailAddress = context.Properties.GetOrDefault(MessageServiceDataSeedConsts.AdminEmailPropertyName)?.ToString() |
||||
|
?? MessageServiceDataSeedConsts.AdminEmailDefaultValue; |
||||
|
var adminUserName = context.Properties.GetOrDefault(MessageServiceDataSeedConsts.AdminUserNamePropertyName)?.ToString() |
||||
|
?? MessageServiceDataSeedConsts.AdminUserNameDefaultValue; |
||||
|
|
||||
|
var tenantAdminUserIdentifier = new UserIdentifier(adminUserId, adminEmailAddress); |
||||
|
|
||||
|
// 租户管理员订阅事件
|
||||
|
await NotificationSubscriptionManager |
||||
|
.SubscribeAsync( |
||||
|
context.TenantId, |
||||
|
tenantAdminUserIdentifier, |
||||
|
TenantNotificationNames.NewTenantRegistered); |
||||
|
|
||||
|
Logger.LogInformation("publish new tenant notification.."); |
||||
|
await NotificationSender.SendNofiterAsync( |
||||
|
TenantNotificationNames.NewTenantRegistered, |
||||
|
new NotificationTemplate( |
||||
|
TenantNotificationNames.NewTenantRegistered, |
||||
|
formUser: adminEmailAddress, |
||||
|
data: new Dictionary<string, object> |
||||
|
{ |
||||
|
{ "name", adminUserName }, |
||||
|
{ "email", adminEmailAddress }, |
||||
|
{ "id", context.TenantId }, |
||||
|
}), |
||||
|
tenantAdminUserIdentifier, |
||||
|
context.TenantId, |
||||
|
NotificationSeverity.Success); |
||||
|
|
||||
|
Logger.LogInformation("tenant administrator subscribes to new tenant events.."); |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Logger.LogWarning(ex, "Failed to send the tenant initialization notification."); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,10 @@ |
|||||
|
namespace LINGYUN.Abp.MicroService.MessageService; |
||||
|
|
||||
|
public static class MessageServiceDataSeedConsts |
||||
|
{ |
||||
|
public const string AdminUserIdPropertyName = "AdminUserId"; |
||||
|
public const string AdminEmailPropertyName = "AdminEmail"; |
||||
|
public const string AdminEmailDefaultValue = "admin@abp.io"; |
||||
|
public const string AdminUserNamePropertyName = "AdminUserName"; |
||||
|
public const string AdminUserNameDefaultValue = "admin"; |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
using LINGYUN.Abp.MicroService.MessageService.DataSeeds; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace LINGYUN.Abp.MicroService.MessageService; |
||||
|
|
||||
|
public class MessageServiceDataSeeder : ITransientDependency |
||||
|
{ |
||||
|
protected NotificationDataSeeder NotificationDataSeeder { get; } |
||||
|
protected ICurrentTenant CurrentTenant { get; } |
||||
|
public MessageServiceDataSeeder( |
||||
|
ICurrentTenant currentTenant, |
||||
|
NotificationDataSeeder notificationDataSeeder) |
||||
|
{ |
||||
|
CurrentTenant = currentTenant; |
||||
|
NotificationDataSeeder = notificationDataSeeder; |
||||
|
} |
||||
|
|
||||
|
public async virtual Task SeedAsync(DataSeedContext context) |
||||
|
{ |
||||
|
using (CurrentTenant.Change(context.TenantId)) |
||||
|
{ |
||||
|
await SeedNotificationAsync(context); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private async Task SeedNotificationAsync(DataSeedContext context) |
||||
|
{ |
||||
|
await NotificationDataSeeder.SeedAsync(context); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,253 @@ |
|||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using Volo.Abp.Emailing; |
||||
|
using Volo.Abp.Settings; |
||||
|
using Volo.Abp.Timing; |
||||
|
using ValueType = Volo.Abp.Settings.ValueType; |
||||
|
|
||||
|
namespace LY.MicroService.Applications.Single.Settings; |
||||
|
|
||||
|
public class SystemGroupSettingDefinitionProvider : SettingDefinitionProvider |
||||
|
{ |
||||
|
private const string GroupName = "System"; |
||||
|
|
||||
|
protected ITimezoneProvider TimezoneProvider { get; } |
||||
|
protected AbpLocalizationOptions LocalizationOptions { get; } |
||||
|
protected IStringLocalizerFactory StringLocalizerFactory { get; } |
||||
|
|
||||
|
public SystemGroupSettingDefinitionProvider( |
||||
|
ITimezoneProvider timezoneProvider, |
||||
|
IStringLocalizerFactory stringLocalizerFactory, |
||||
|
IOptions<AbpLocalizationOptions> localizationOptions) |
||||
|
{ |
||||
|
TimezoneProvider = timezoneProvider; |
||||
|
StringLocalizerFactory = stringLocalizerFactory; |
||||
|
LocalizationOptions = localizationOptions.Value; |
||||
|
} |
||||
|
|
||||
|
public override void Define(ISettingDefinitionContext context) |
||||
|
{ |
||||
|
SetSystemSettingGroup(context); |
||||
|
SetEmailSettingGroup(context); |
||||
|
} |
||||
|
|
||||
|
private void SetSystemSettingGroup(ISettingDefinitionContext context) |
||||
|
{ |
||||
|
context.GetOrNull(LocalizationSettingNames.DefaultLanguage) |
||||
|
?.WithGroup(GroupName, L("Settings:System"), order: 0) |
||||
|
?.WithParent("Language", L("Settings:System.Language"), order: 0) |
||||
|
?.WithOrder(0) |
||||
|
?.WithOptions(LocalizationOptions.Languages.Select(l => new NameValue<string>(l.DisplayName, l.CultureName))) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
|
||||
|
var timezoneSetting = context.GetOrNull(TimingSettingNames.TimeZone); |
||||
|
if (timezoneSetting != null) |
||||
|
{ |
||||
|
var stringLocalizer = StringLocalizerFactory.Create<AbpSettingManagementResource>(); |
||||
|
var timezones = TimeZoneHelper.GetTimezones(TimezoneProvider.GetIanaTimezones()); |
||||
|
timezones.Insert(0, new NameValue |
||||
|
{ |
||||
|
Name = stringLocalizer["DefaultTimeZone"], |
||||
|
Value = "Unspecified" |
||||
|
}); |
||||
|
|
||||
|
timezoneSetting |
||||
|
.WithGroup( |
||||
|
GroupName, |
||||
|
L("Settings:System"), |
||||
|
order: 0, |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.TimeZone]) |
||||
|
.WithParent("Timing", L("Settings:System.Timing"), order: 0) |
||||
|
.WithOrder(1) |
||||
|
.WithOptions(timezones) |
||||
|
.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private static void SetEmailSettingGroup(ISettingDefinitionContext context) |
||||
|
{ |
||||
|
context.GetOrNull(EmailSettingNames.DefaultFromAddress) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Default", |
||||
|
L("Settings:Emailing.Default"), |
||||
|
order: 0) |
||||
|
?.WithOrder(0) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.DefaultFromDisplayName) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Default", |
||||
|
L("Settings:Emailing.Default"), |
||||
|
order: 0) |
||||
|
?.WithOrder(1) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
|
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Domain) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(0) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Host) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(1) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Port) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(2) |
||||
|
?.WithValueType(ValueType.Number) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.UserName) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(3) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Password) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(4) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.EnableSsl) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(5) |
||||
|
?.WithValueType(ValueType.Boolean) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.UseDefaultCredentials) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(6) |
||||
|
?.WithValueType(ValueType.Boolean) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
} |
||||
|
|
||||
|
public static LocalizableString L(string name) |
||||
|
{ |
||||
|
return LocalizableString.Create<AbpSettingManagementResource>(name); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,260 @@ |
|||||
|
using LINGYUN.Abp.SettingManagement; |
||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using System.Linq; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Emailing; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.SettingManagement; |
||||
|
using Volo.Abp.SettingManagement.Localization; |
||||
|
using Volo.Abp.Settings; |
||||
|
using Volo.Abp.Timing; |
||||
|
using ValueType = Volo.Abp.Settings.ValueType; |
||||
|
|
||||
|
namespace LY.MicroService.BackendAdmin.Settings; |
||||
|
|
||||
|
public class SystemGroupSettingDefinitionProvider : SettingDefinitionProvider |
||||
|
{ |
||||
|
private const string GroupName = "System"; |
||||
|
|
||||
|
protected ITimezoneProvider TimezoneProvider { get; } |
||||
|
protected AbpLocalizationOptions LocalizationOptions { get; } |
||||
|
protected IStringLocalizerFactory StringLocalizerFactory { get; } |
||||
|
|
||||
|
public SystemGroupSettingDefinitionProvider( |
||||
|
ITimezoneProvider timezoneProvider, |
||||
|
IStringLocalizerFactory stringLocalizerFactory, |
||||
|
IOptions<AbpLocalizationOptions> localizationOptions) |
||||
|
{ |
||||
|
TimezoneProvider = timezoneProvider; |
||||
|
StringLocalizerFactory = stringLocalizerFactory; |
||||
|
LocalizationOptions = localizationOptions.Value; |
||||
|
} |
||||
|
|
||||
|
public override void Define(ISettingDefinitionContext context) |
||||
|
{ |
||||
|
SetSystemSettingGroup(context); |
||||
|
SetEmailSettingGroup(context); |
||||
|
} |
||||
|
|
||||
|
private void SetSystemSettingGroup(ISettingDefinitionContext context) |
||||
|
{ |
||||
|
context.GetOrNull(LocalizationSettingNames.DefaultLanguage) |
||||
|
?.WithGroup(GroupName, L("Settings:System"), order: 0) |
||||
|
?.WithParent("Language", L("Settings:System.Language"), order: 0) |
||||
|
?.WithOrder(0) |
||||
|
?.WithOptions(LocalizationOptions.Languages.Select(l => new NameValue<string>(l.DisplayName, l.CultureName))) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
|
||||
|
var timezoneSetting = context.GetOrNull(TimingSettingNames.TimeZone); |
||||
|
if (timezoneSetting != null) |
||||
|
{ |
||||
|
var stringLocalizer = StringLocalizerFactory.Create<AbpSettingManagementResource>(); |
||||
|
var timezones = TimeZoneHelper.GetTimezones(TimezoneProvider.GetIanaTimezones()); |
||||
|
timezones.Insert(0, new NameValue |
||||
|
{ |
||||
|
Name = stringLocalizer["DefaultTimeZone"], |
||||
|
Value = "Unspecified" |
||||
|
}); |
||||
|
|
||||
|
timezoneSetting |
||||
|
.WithGroup( |
||||
|
GroupName, |
||||
|
L("Settings:System"), |
||||
|
order: 0, |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.TimeZone]) |
||||
|
.WithParent("Timing", L("Settings:System.Timing"), order: 0) |
||||
|
.WithOrder(1) |
||||
|
.WithOptions(timezones) |
||||
|
.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private static void SetEmailSettingGroup(ISettingDefinitionContext context) |
||||
|
{ |
||||
|
context.GetOrNull(EmailSettingNames.DefaultFromAddress) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Default", |
||||
|
L("Settings:Emailing.Default"), |
||||
|
order: 0) |
||||
|
?.WithOrder(0) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.DefaultFromDisplayName) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Default", |
||||
|
L("Settings:Emailing.Default"), |
||||
|
order: 0) |
||||
|
?.WithOrder(1) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
|
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Domain) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(0) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Host) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(1) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Port) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(2) |
||||
|
?.WithValueType(ValueType.Number) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.UserName) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(3) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.Password) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(4) |
||||
|
?.WithValueType(ValueType.String) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.EnableSsl) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(5) |
||||
|
?.WithValueType(ValueType.Boolean) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
context.GetOrNull(EmailSettingNames.Smtp.UseDefaultCredentials) |
||||
|
?.WithGroup( |
||||
|
"Emailing", |
||||
|
L("Settings:Emailing"), |
||||
|
order: 1, |
||||
|
requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], |
||||
|
requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) |
||||
|
?.WithParent( |
||||
|
"Smtp", |
||||
|
L("Settings:Emailing.Smtp"), |
||||
|
order: 1, |
||||
|
requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) |
||||
|
?.WithOrder(6) |
||||
|
?.WithValueType(ValueType.Boolean) |
||||
|
?.ReplaceProviders( |
||||
|
DefaultValueSettingValueProvider.ProviderName, |
||||
|
ConfigurationSettingValueProvider.ProviderName, |
||||
|
GlobalSettingValueProvider.ProviderName, |
||||
|
TenantSettingValueProvider.ProviderName); |
||||
|
} |
||||
|
|
||||
|
public static LocalizableString L(string name) |
||||
|
{ |
||||
|
return LocalizableString.Create<AbpSettingManagementResource>(name); |
||||
|
} |
||||
|
} |
||||
|
|
||||
Loading…
Reference in new issue