diff --git a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureDefinitionProvider.cs b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureDefinitionProvider.cs index 2cc822fb1..020cd0bb7 100644 --- a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureDefinitionProvider.cs @@ -13,27 +13,27 @@ namespace LINGYUN.Abp.Auditing.Features name: AuditingFeatureNames.GroupName, displayName: L("Features:Auditing")); - var loggingFeature = auditingGroup.AddFeature( - name: AuditingFeatureNames.Logging.Default, + var loggingEnableFeature = auditingGroup.AddFeature( + name: AuditingFeatureNames.Logging.Enable, displayName: L("Features:Auditing"), - description: L("Features:Auditing") + description: L("Features:AuditingDesc") ); - loggingFeature.CreateChild( + loggingEnableFeature.CreateChild( name: AuditingFeatureNames.Logging.AuditLog, defaultValue: true.ToString(), displayName: L("Features:DisplayName:AuditLog"), description: L("Features:Description:AuditLog"), valueType: new ToggleStringValueType(new BooleanValueValidator()) ); - loggingFeature.CreateChild( + loggingEnableFeature.CreateChild( name: AuditingFeatureNames.Logging.SecurityLog, defaultValue: true.ToString(), displayName: L("Features:DisplayName:SecurityLog"), description: L("Features:Description:SecurityLog"), valueType: new ToggleStringValueType(new BooleanValueValidator()) ); - loggingFeature.CreateChild( + loggingEnableFeature.CreateChild( name: AuditingFeatureNames.Logging.SystemLog, defaultValue: true.ToString(), displayName: L("Features:DisplayName:SystemLog"), diff --git a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureNames.cs b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureNames.cs index 8dd83769d..6a923e8a5 100644 --- a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureNames.cs +++ b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Features/AuditingFeatureNames.cs @@ -7,6 +7,8 @@ { public const string Default = GroupName + ".Logging"; + public const string Enable = Default + ".Enable"; + public const string AuditLog = Default + ".AuditLog"; public const string SecurityLog = Default + ".SecurityLog"; diff --git a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/en.json b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/en.json index d9fa10b27..2fe983083 100644 --- a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/en.json +++ b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/en.json @@ -6,12 +6,13 @@ "Permissions:SecurityLog": "Security log", "Permissions:DeleteLog": "Delete", "Features:Auditing": "Auditing", + "Features:AuditingDesc": "Enable the auditing function", "Features:DisplayName:AuditLog": "Audit log", - "Features:Description:AuditLog": "Whether to enable audit logging", + "Features:Description:AuditLog": "Enable audit logging", "Features:DisplayName:SecurityLog": "Security log", - "Features:Description:SecurityLog": "Whether to enable security logging", + "Features:Description:SecurityLog": "Enable security logging", "Features:DisplayName:SystemLog": "System log", - "Features:Description:SystemLog": "Whether to enable system logging", + "Features:Description:SystemLog": "Enable system logging", "SecurityLog": "Security log", "AuditLog": "Audit log", "Logging": "System Log", diff --git a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/zh-Hans.json b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/zh-Hans.json index 1ed9e1413..d5b0b1b80 100644 --- a/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/zh-Hans.json +++ b/aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application.Contracts/LINGYUN/Abp/Auditing/Localization/Resources/zh-Hans.json @@ -6,12 +6,13 @@ "Permissions:SecurityLog": "安全日志", "Permissions:DeleteLog": "删除日志", "Features:Auditing": "内部审计", + "Features:AuditingDesc": "启用内部审计功能", "Features:DisplayName:AuditLog": "审计日志", - "Features:Description:AuditLog": "是否启用审计日志功能", + "Features:Description:AuditLog": "启用审计日志功能", "Features:DisplayName:SecurityLog": "安全日志", - "Features:Description:SecurityLog": "是否启用安全日志功能", + "Features:Description:SecurityLog": "启用安全日志功能", "Features:DisplayName:SystemLog": "系统日志", - "Features:Description:SystemLog": "是否启用系统日志功能", + "Features:Description:SystemLog": "启用系统日志功能", "SecurityLog": "安全日志", "AuditLog": "审计日志", "Logging": "系统日志", diff --git a/aspnet-core/modules/cloud-tencent/LINGYUN.Abp.Tencent/LINGYUN/Abp/Tencent/Features/TencentCloudFeatureDefinitionProvider.cs b/aspnet-core/modules/cloud-tencent/LINGYUN.Abp.Tencent/LINGYUN/Abp/Tencent/Features/TencentCloudFeatureDefinitionProvider.cs index 10de3b2b4..591b9c46b 100644 --- a/aspnet-core/modules/cloud-tencent/LINGYUN.Abp.Tencent/LINGYUN/Abp/Tencent/Features/TencentCloudFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/cloud-tencent/LINGYUN.Abp.Tencent/LINGYUN/Abp/Tencent/Features/TencentCloudFeatureDefinitionProvider.cs @@ -9,32 +9,22 @@ namespace LINGYUN.Abp.Tencent.Features { public override void Define(IFeatureDefinitionContext context) { - var group = context.AddGroup(TencentCloudFeatures.GroupName, L("Features:TencentCloud")); - - var sms = group.AddFeature( - name: TencentCloudFeatures.Sms.GroupName, - displayName: L("Features:TencentSms"), - description: L("Features:TencentSms")); + var group = context.AddGroup(TencentCloudFeatures.GroupName, L("Features:TencentCloud")); - sms.CreateChild( + var smsEnableFeature = group.AddFeature( name: TencentCloudFeatures.Sms.Enable, defaultValue: true.ToString(), displayName: L("Features:TencentSmsEnable"), description: L("Features:TencentSmsEnable.Desc"), - valueType: new ToggleStringValueType(new BooleanValueValidator())); - - var blobStoring = group.AddFeature( - name: TencentCloudFeatures.BlobStoring.GroupName, - displayName: L("Features:TencentBlobStoring"), - description: L("Features:TencentBlobStoring")); + valueType: new ToggleStringValueType(new BooleanValueValidator())); - blobStoring.CreateChild( + var blobStoringEnableFeature = group.AddFeature( name: TencentCloudFeatures.BlobStoring.Enable, defaultValue: true.ToString(), displayName: L("Features:TencentBlobStoringEnable"), description: L("Features:TencentBlobStoringEnable.Desc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - blobStoring.CreateChild( + blobStoringEnableFeature.CreateChild( name: TencentCloudFeatures.BlobStoring.MaximumStreamSize, defaultValue: "0", displayName: L("Features:TencentBlobStoringMaximumStreamSize"), diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs index e9ba43550..6715db6af 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs +++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs @@ -9,6 +9,7 @@ using System.Threading; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.DependencyInjection; +using Volo.Abp.Timing; using Volo.Abp.VirtualFileSystem; namespace LINGYUN.Abp.Features.LimitValidation.Redis @@ -26,6 +27,7 @@ namespace LINGYUN.Abp.Features.LimitValidation.Redis private IDatabaseAsync _redis; private IServer _server; + private readonly IClock _clock; private readonly IVirtualFileProvider _virtualFileProvider; private readonly IRedisLimitFeatureNamingNormalizer _featureNamingNormalizer; private readonly AbpRedisRequiresLimitFeatureOptions _options; @@ -34,6 +36,7 @@ namespace LINGYUN.Abp.Features.LimitValidation.Redis private readonly SemaphoreSlim _connectionLock = new SemaphoreSlim(initialCount: 1, maxCount: 1); public RedisRequiresLimitFeatureChecker( + IClock clock, IVirtualFileProvider virtualFileProvider, IRedisLimitFeatureNamingNormalizer featureNamingNormalizer, IOptions optionsAccessor) @@ -44,8 +47,9 @@ namespace LINGYUN.Abp.Features.LimitValidation.Redis } _options = optionsAccessor.Value; - _virtualFileProvider = virtualFileProvider; - _featureNamingNormalizer = featureNamingNormalizer; + _clock = clock ?? throw new ArgumentNullException(nameof(clock)); + _virtualFileProvider = virtualFileProvider ?? throw new ArgumentNullException(nameof(virtualFileProvider)); + _featureNamingNormalizer = featureNamingNormalizer ?? throw new ArgumentNullException(nameof(featureNamingNormalizer)); _instance = _options.InstanceName ?? string.Empty; @@ -81,7 +85,7 @@ namespace LINGYUN.Abp.Features.LimitValidation.Redis } var keys = new RedisKey[1] { NormalizeKey(context) }; - var values = new RedisValue[] { context.GetEffectTicks() }; + var values = new RedisValue[] { context.GetEffectTicks(_clock.Now) }; var result = await _redis.ScriptEvaluateAsync(luaSha1, keys, values); if (result.Type == ResultType.Error) { diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN.Abp.Features.LimitValidation.csproj b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN.Abp.Features.LimitValidation.csproj index dc473e5b8..e19678531 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN.Abp.Features.LimitValidation.csproj +++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN.Abp.Features.LimitValidation.csproj @@ -20,6 +20,7 @@ + diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationModule.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationModule.cs index 73651a62b..8ce1c0709 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationModule.cs +++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationModule.cs @@ -3,11 +3,14 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Features; using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.Abp.Timing; using Volo.Abp.VirtualFileSystem; namespace LINGYUN.Abp.Features.LimitValidation { - [DependsOn(typeof(AbpFeaturesModule))] + [DependsOn( + typeof(AbpTimingModule), + typeof(AbpFeaturesModule))] public class AbpFeaturesLimitValidationModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs index c26547c6e..34dc31061 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs +++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs @@ -7,10 +7,11 @@ namespace LINGYUN.Abp.Features.LimitValidation { public class AbpFeaturesLimitValidationOptions { - public IDictionary> EffectPolicys { get; } + public IDictionary> EffectPolicys { get; } + public AbpFeaturesLimitValidationOptions() { - EffectPolicys = new Dictionary>(); + EffectPolicys = new Dictionary>(); } /// /// 变更功能限制策略时长计算方法 @@ -20,7 +21,7 @@ namespace LINGYUN.Abp.Features.LimitValidation /// /// 返回值一定要是秒钟刻度 /// - public void MapEffectPolicy(LimitPolicy policy,[NotNull] Func func) + public void MapEffectPolicy(LimitPolicy policy,[NotNull] Func func) { Check.NotNull(func, nameof(func)); @@ -36,54 +37,50 @@ namespace LINGYUN.Abp.Features.LimitValidation internal void MapDefaultEffectPolicys() { - MapEffectPolicy(LimitPolicy.Minute, (time) => + MapEffectPolicy(LimitPolicy.Minute, (now, tick) => { - var utcNow = DateTime.UtcNow; - return (long)(utcNow.AddMinutes(time) - utcNow).TotalSeconds; + return (long)(now.AddMinutes(tick) - now).TotalSeconds; }); - MapEffectPolicy(LimitPolicy.Hours, (time) => + MapEffectPolicy(LimitPolicy.Hours, (now, tick) => { - var utcNow = DateTime.UtcNow; - return (long)(utcNow.AddHours(time) - utcNow).TotalSeconds; + return (long)(now.AddHours(tick) - now).TotalSeconds; }); - MapEffectPolicy(LimitPolicy.Days, (time) => + MapEffectPolicy(LimitPolicy.Days, (now, tick) => { // 按天计算应取当天 - return (long)(DateTime.UtcNow.Date.AddDays(time) - DateTime.UtcNow).TotalSeconds; + return (long)(now.Date.AddDays(tick) - DateTime.UtcNow).TotalSeconds; }); - MapEffectPolicy(LimitPolicy.Weeks,(time) => + MapEffectPolicy(LimitPolicy.Weeks,(now, tick) => { // 按周计算应取当周 - var utcNow = DateTime.UtcNow.Date; - var dayOfWeek = (int)utcNow.DayOfWeek - 1; - if (utcNow.DayOfWeek == DayOfWeek.Sunday) + var nowDate = now.Date; + var dayOfWeek = (int)nowDate.DayOfWeek - 1; + if (nowDate.DayOfWeek == DayOfWeek.Sunday) { dayOfWeek = 6; } - var utcOnceDayOfWeek = utcNow.AddDays(-dayOfWeek); + var utcOnceDayOfWeek = nowDate.AddDays(-dayOfWeek); - return (long)(utcOnceDayOfWeek.AddDays(time * 7) - DateTime.UtcNow).TotalSeconds; + return (long)(utcOnceDayOfWeek.AddDays(tick * 7) - DateTime.UtcNow).TotalSeconds; }); - MapEffectPolicy(LimitPolicy.Month, (time) => + MapEffectPolicy(LimitPolicy.Month, (now, tick) => { // 按月计算应取当月 - var utcNow = DateTime.UtcNow; - var utcOnceDayOfMonth = new DateTime(utcNow.Year, utcNow.Month, 1, 0, 0, 0, 0); + var utcOnceDayOfMonth = new DateTime(now.Year, now.Month, 1, 0, 0, 0, 0); - return (long)(utcOnceDayOfMonth.AddMonths(time) - utcNow).TotalSeconds; + return (long)(utcOnceDayOfMonth.AddMonths(tick) - now).TotalSeconds; }); - MapEffectPolicy(LimitPolicy.Years, (time) => + MapEffectPolicy(LimitPolicy.Years, (now, tick) => { // 按年计算应取当年 - var utcNow = DateTime.UtcNow; - var utcOnceDayOfYear = new DateTime(utcNow.Year, 1, 1, 0, 0, 0, 0); + var utcOnceDayOfYear = new DateTime(now.Year, 1, 1, 0, 0, 0, 0); - return (long)(utcOnceDayOfYear.AddYears(time) - utcNow).TotalSeconds; + return (long)(utcOnceDayOfYear.AddYears(tick) - now).TotalSeconds; }); } } diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs index ab8a8f8e7..6646d2d42 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs +++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs @@ -1,4 +1,6 @@ -namespace LINGYUN.Abp.Features.LimitValidation +using System; + +namespace LINGYUN.Abp.Features.LimitValidation { public class RequiresLimitFeatureContext { @@ -38,9 +40,9 @@ /// 获取生效时间跨度,单位:s /// /// - public long GetEffectTicks() + public long GetEffectTicks(DateTime now) { - return Options.EffectPolicys[Policy](Interval); + return Options.EffectPolicys[Policy](now, Interval); } } } diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.en.md b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.en.md index fd53686c6..9a72ebea4 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.en.md +++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.en.md @@ -80,7 +80,7 @@ public class YouProjectModule : AbpModule { Configure(options => { - options.MapEffectPolicy(LimitPolicy.Minute, (time) => return 60;); // Means that no matter how many minutes (time), only 60 seconds will be limited + options.MapEffectPolicy(LimitPolicy.Minute, (now, tick) => return 60;); // Means that no matter how many minutes (time), only 60 seconds will be limited }); } } diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.md b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.md index 25eb50c03..e82e7430d 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.md +++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.md @@ -80,7 +80,7 @@ public class YouProjectModule : AbpModule { Configure(options => { - options.MapEffectPolicy(LimitPolicy.Minute, (time) => return 60;); // 表示不管多少分钟(time),都只会限制60秒 + options.MapEffectPolicy(LimitPolicy.Minute, (now, tick) => return 60;); // 表示不管多少分钟(time),都只会限制60秒 }); } } diff --git a/aspnet-core/modules/notifications/LINGYUN.Abp.Notifications.Domain/LINGYUN/Abp/Notifications/AbpNotificationsDomainModule.cs b/aspnet-core/modules/notifications/LINGYUN.Abp.Notifications.Domain/LINGYUN/Abp/Notifications/AbpNotificationsDomainModule.cs index f49b51eaf..69fe7ef4a 100644 --- a/aspnet-core/modules/notifications/LINGYUN.Abp.Notifications.Domain/LINGYUN/Abp/Notifications/AbpNotificationsDomainModule.cs +++ b/aspnet-core/modules/notifications/LINGYUN.Abp.Notifications.Domain/LINGYUN/Abp/Notifications/AbpNotificationsDomainModule.cs @@ -29,6 +29,11 @@ public class AbpNotificationsDomainModule : AbpModule options.IsDynamicNotificationsStoreEnabled = false; }); } + + Configure(options => + { + options.AddProfile(validate: true); + }); } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs index 11c534793..092ca7b8a 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs @@ -20,45 +20,45 @@ namespace LINGYUN.Abp.OssManagement.Features description: L("Features:Description:PublicAccess"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - var ossFeature = featureGroup.AddFeature( - name: AbpOssManagementFeatureNames.OssObject.Default, + var ossDefaultFeature = featureGroup.AddFeature( + name: AbpOssManagementFeatureNames.OssObject.Enable, defaultValue: true.ToString(), displayName: L("Features:DisplayName:OssObject"), description: L("Features:Description:OssObject"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - ossFeature.CreateChild( + ossDefaultFeature.CreateChild( name: AbpOssManagementFeatureNames.OssObject.DownloadFile, defaultValue: false.ToString(), displayName: L("Features:DisplayName:DownloadFile"), description: L("Features:Description:DownloadFile"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - ossFeature.CreateChild( + ossDefaultFeature.CreateChild( name: AbpOssManagementFeatureNames.OssObject.DownloadLimit, defaultValue: "1000", displayName: L("Features:DisplayName:DownloadLimit"), description: L("Features:Description:DownloadLimit"), valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用 - ossFeature.CreateChild( + ossDefaultFeature.CreateChild( name: AbpOssManagementFeatureNames.OssObject.DownloadInterval, defaultValue: "1", displayName: L("Features:DisplayName:DownloadInterval"), description: L("Features:Description:DownloadInterval"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 12))); // 上限12月 - ossFeature.CreateChild( + ossDefaultFeature.CreateChild( name: AbpOssManagementFeatureNames.OssObject.UploadFile, defaultValue: true.ToString(), displayName: L("Features:DisplayName:UploadFile"), description: L("Features:Description:UploadFile"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - ossFeature.CreateChild( + ossDefaultFeature.CreateChild( name: AbpOssManagementFeatureNames.OssObject.UploadLimit, defaultValue: "1000", displayName: L("Features:DisplayName:UploadLimit"), description: L("Features:Description:UploadLimit"), valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用 - ossFeature.CreateChild( + ossDefaultFeature.CreateChild( name: AbpOssManagementFeatureNames.OssObject.UploadInterval, defaultValue: "1", displayName: L("Features:DisplayName:UploadInterval"), diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs index 00cb81f3f..8dd16b091 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs +++ b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs @@ -11,6 +11,8 @@ public class OssObject { public const string Default = GroupName + ".OssObject"; + + public const string Enable = Default + ".Enable"; /// /// 下载文件功能 /// diff --git a/aspnet-core/modules/pushplus/LINGYUN.Abp.PushPlus/LINGYUN/Abp/PushPlus/Features/PushPlusFeatureDefinitionProvider.cs b/aspnet-core/modules/pushplus/LINGYUN.Abp.PushPlus/LINGYUN/Abp/PushPlus/Features/PushPlusFeatureDefinitionProvider.cs index 14c675e82..deecaf6a6 100644 --- a/aspnet-core/modules/pushplus/LINGYUN.Abp.PushPlus/LINGYUN/Abp/PushPlus/Features/PushPlusFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/pushplus/LINGYUN.Abp.PushPlus/LINGYUN/Abp/PushPlus/Features/PushPlusFeatureDefinitionProvider.cs @@ -12,40 +12,36 @@ public class PushPlusFeatureDefinitionProvider : FeatureDefinitionProvider name: PushPlusFeatureNames.GroupName, displayName: L("Features:PushPlus")); - group.AddFeature( + var pushPlusMessageEnableFeature = group.AddFeature( name: PushPlusFeatureNames.Message.Enable, defaultValue: "false", displayName: L("Features:MessageEnable"), description: L("Features:MessageEnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - CreateWeChatChannelFeature(group); - CreateWeWorkChannelFeature(group); - CreateWebhookChannelFeature(group); - CreateEmailChannelFeature(group); - CreateSmsChannelFeature(group); + CreateWeChatChannelFeature(pushPlusMessageEnableFeature); + CreateWeWorkChannelFeature(pushPlusMessageEnableFeature); + CreateWebhookChannelFeature(pushPlusMessageEnableFeature); + CreateEmailChannelFeature(pushPlusMessageEnableFeature); + CreateSmsChannelFeature(pushPlusMessageEnableFeature); } private static void CreateWeChatChannelFeature( - FeatureGroupDefinition group) + FeatureDefinition pushPlusMessageEnableFeature) { - var weChatChannel = group.AddFeature( - name: PushPlusFeatureNames.Channel.WeChat.GroupName, - displayName: L("Features:Channel.WeChat"), - description: L("Features:Channel.WeChat")); - weChatChannel.CreateChild( + var weChatChannelEnableFeature = pushPlusMessageEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.WeChat.Enable, defaultValue: "false", displayName: L("Features:Channel.WeChat.Enable"), description: L("Features:Channel.WeChat.EnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - weChatChannel.CreateChild( + weChatChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.WeChat.SendLimit, defaultValue: "200", displayName: L("Features:Channel.WeChat.SendLimit"), description: L("Features:Channel.WeChat.SendLimitDesc"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000))); - weChatChannel.CreateChild( + weChatChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.WeChat.SendLimitInterval, defaultValue: "1", displayName: L("Features:Channel.WeChat.SendLimitInterval"), @@ -54,25 +50,21 @@ public class PushPlusFeatureDefinitionProvider : FeatureDefinitionProvider } private static void CreateWeWorkChannelFeature( - FeatureGroupDefinition group) + FeatureDefinition pushPlusMessageEnableFeature) { - var weWorkChannel = group.AddFeature( - name: PushPlusFeatureNames.Channel.WeWork.GroupName, - displayName: L("Features:Channel.WeWork"), - description: L("Features:Channel.WeWork")); - weWorkChannel.CreateChild( + var weWorkChannelEnableFeature = pushPlusMessageEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.WeWork.Enable, defaultValue: "false", displayName: L("Features:Channel.WeWork.Enable"), description: L("Features:Channel.WeWork.EnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - weWorkChannel.CreateChild( + weWorkChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.WeWork.SendLimit, defaultValue: "200", displayName: L("Features:Channel.WeWork.SendLimit"), description: L("Features:Channel.WeWork.SendLimitDesc"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 10000))); - weWorkChannel.CreateChild( + weWorkChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.WeWork.SendLimitInterval, defaultValue: "1", displayName: L("Features:Channel.WeWork.SendLimitInterval"), @@ -81,25 +73,21 @@ public class PushPlusFeatureDefinitionProvider : FeatureDefinitionProvider } private static void CreateWebhookChannelFeature( - FeatureGroupDefinition group) + FeatureDefinition pushPlusMessageEnableFeature) { - var webhookChannel = group.AddFeature( - name: PushPlusFeatureNames.Channel.Webhook.GroupName, - displayName: L("Features:Channel.Webhook"), - description: L("Features:Channel.Webhook")); - webhookChannel.CreateChild( + var webhookChannelEnableFeatuer = pushPlusMessageEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.Webhook.Enable, defaultValue: "false", displayName: L("Features:Channel.Webhook.Enable"), description: L("Features:Channel.Webhook.EnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - webhookChannel.CreateChild( + webhookChannelEnableFeatuer.CreateChild( name: PushPlusFeatureNames.Channel.Webhook.SendLimit, defaultValue: "200", displayName: L("Features:Channel.Webhook.SendLimit"), description: L("Features:Channel.Webhook.SendLimitDesc"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 10000))); - webhookChannel.CreateChild( + webhookChannelEnableFeatuer.CreateChild( name: PushPlusFeatureNames.Channel.Webhook.SendLimitInterval, defaultValue: "1", displayName: L("Features:Channel.Webhook.SendLimitInterval"), @@ -108,25 +96,21 @@ public class PushPlusFeatureDefinitionProvider : FeatureDefinitionProvider } private static void CreateEmailChannelFeature( - FeatureGroupDefinition group) + FeatureDefinition pushPlusMessageEnableFeature) { - var emailChannel = group.AddFeature( - name: PushPlusFeatureNames.Channel.Email.GroupName, - displayName: L("Features:Channel.Email"), - description: L("Features:Channel.Email")); - emailChannel.CreateChild( + var emailChannelEnableFeature = pushPlusMessageEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.Email.Enable, defaultValue: "false", displayName: L("Features:Channel.Email.Enable"), description: L("Features:Channel.Email.EnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - emailChannel.CreateChild( + emailChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.Email.SendLimit, defaultValue: "200", displayName: L("Features:Channel.Email.SendLimit"), description: L("Features:Channel.Email.SendLimitDesc"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000))); - emailChannel.CreateChild( + emailChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.Email.SendLimitInterval, defaultValue: "1", displayName: L("Features:Channel.Email.SendLimitInterval"), @@ -135,25 +119,21 @@ public class PushPlusFeatureDefinitionProvider : FeatureDefinitionProvider } private static void CreateSmsChannelFeature( - FeatureGroupDefinition group) + FeatureDefinition pushPlusMessageEnableFeature) { - var smsChannel = group.AddFeature( - name: PushPlusFeatureNames.Channel.Sms.GroupName, - displayName: L("Features:Channel.Sms"), - description: L("Features:Channel.Sms")); - smsChannel.CreateChild( + var smsChannelEnableFeature = pushPlusMessageEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.Sms.Enable, defaultValue: "false", displayName: L("Features:Channel.Sms.Enable"), description: L("Features:Channel.Sms.EnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - smsChannel.CreateChild( + smsChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.Sms.SendLimit, defaultValue: "200", displayName: L("Features:Channel.Sms.SendLimit"), description: L("Features:Channel.Sms.SendLimitDesc"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000))); - smsChannel.CreateChild( + smsChannelEnableFeature.CreateChild( name: PushPlusFeatureNames.Channel.Sms.SendLimitInterval, defaultValue: "1", displayName: L("Features:Channel.Sms.SendLimitInterval"), diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Features/WeChatMiniProgramFeatureDefinitionProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Features/WeChatMiniProgramFeatureDefinitionProvider.cs index 0b89a3537..e631c759f 100644 --- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Features/WeChatMiniProgramFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Features/WeChatMiniProgramFeatureDefinitionProvider.cs @@ -12,18 +12,18 @@ namespace LINGYUN.Abp.WeChat.MiniProgram.Features { var group = context.GetGroupOrNull(WeChatFeatures.GroupName); - var miniProgram = group.AddFeature( - name: WeChatMiniProgramFeatures.GroupName, - displayName: L("Features:WeChat.MiniProgram"), - description: L("Features:WeChat.MiniProgramDesc")); + //var miniProgram = group.AddFeature( + // name: WeChatMiniProgramFeatures.GroupName, + // displayName: L("Features:WeChat.MiniProgram"), + // description: L("Features:WeChat.MiniProgramDesc")); - miniProgram.CreateChild( + var miniProgramEnableFeature = group.AddFeature( name: WeChatMiniProgramFeatures.Enable, defaultValue: true.ToString(), displayName: L("Features:WeChat.MiniProgram.Enable"), description: L("Features:WeChat.MiniProgram.EnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - miniProgram.CreateChild( + miniProgramEnableFeature.CreateChild( name: WeChatMiniProgramFeatures.EnableAuthorization, defaultValue: true.ToString(), displayName: L("Features:WeChat.MiniProgram.EnableAuthorization"), @@ -31,24 +31,19 @@ namespace LINGYUN.Abp.WeChat.MiniProgram.Features valueType: new ToggleStringValueType(new BooleanValueValidator())); - var message = miniProgram.CreateChild( - name: WeChatMiniProgramFeatures.Messages.Default, - displayName: L("Features:WeChat.MiniProgram.Messages"), - description: L("Features:WeChat.MiniProgram.MessagesDesc")); - - message.CreateChild( + var messageEnableFeature = group.AddFeature( name: WeChatMiniProgramFeatures.Messages.Enable, defaultValue: true.ToString(), displayName: L("Features:WeChat.MiniProgram.EnableMessages"), description: L("Features:WeChat.MiniProgram.EnableMessagesDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - message.CreateChild( + messageEnableFeature.CreateChild( name: WeChatMiniProgramFeatures.Messages.SendLimit, defaultValue: WeChatMiniProgramFeatures.Messages.DefaultSendLimit.ToString(), displayName: L("Features:WeChat.MiniProgram.SendLimit"), description: L("Features:WeChat.MiniProgram.SendLimitDesc"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 100_0000))); - message.CreateChild( + messageEnableFeature.CreateChild( name: WeChatMiniProgramFeatures.Messages.SendLimitInterval, defaultValue: WeChatMiniProgramFeatures.Messages.DefaultSendLimitInterval.ToString(), displayName: L("Features:WeChat.MiniProgram.SendLimitInterval"), diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Features/WeChatOfficialFeatureDefinitionProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Features/WeChatOfficialFeatureDefinitionProvider.cs index 88be4b4b4..b00cfb3bd 100644 --- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Features/WeChatOfficialFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Features/WeChatOfficialFeatureDefinitionProvider.cs @@ -12,18 +12,14 @@ namespace LINGYUN.Abp.WeChat.Official.Features { var group = context.GetGroupOrNull(WeChatFeatures.GroupName); - var official = group.AddFeature( - name: WeChatOfficialFeatures.GroupName, - displayName: L("Features:WeChat.Official"), - description: L("Features:WeChat.OfficialDesc")); - - official.CreateChild( + var officialEnableFeature = group.AddFeature( name: WeChatOfficialFeatures.Enable, defaultValue: true.ToString(), displayName: L("Features:WeChat.Official.Enable"), description: L("Features:WeChat.Official.EnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - official.CreateChild( + + officialEnableFeature.CreateChild( name: WeChatOfficialFeatures.EnableAuthorization, defaultValue: true.ToString(), displayName: L("Features:WeChat.Official.EnableAuthorization"), diff --git a/aspnet-core/modules/wx-pusher/LINGYUN.Abp.WxPusher/LINGYUN/Abp/WxPusher/Features/WxPusherFeatureDefinitionProvider.cs b/aspnet-core/modules/wx-pusher/LINGYUN.Abp.WxPusher/LINGYUN/Abp/WxPusher/Features/WxPusherFeatureDefinitionProvider.cs index b560fbc02..274c4009c 100644 --- a/aspnet-core/modules/wx-pusher/LINGYUN.Abp.WxPusher/LINGYUN/Abp/WxPusher/Features/WxPusherFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/wx-pusher/LINGYUN.Abp.WxPusher/LINGYUN/Abp/WxPusher/Features/WxPusherFeatureDefinitionProvider.cs @@ -12,31 +12,27 @@ public class WxPusherFeatureDefinitionProvider : FeatureDefinitionProvider var group = context.AddGroup( name: WxPusherFeatureNames.GroupName, displayName: L("Features:WxPusher")); - group.AddFeature( + + var wxPusherEnableFeature = group.AddFeature( name: WxPusherFeatureNames.Enable, defaultValue: "false", displayName: L("Features:WxPusherEnable"), description: L("Features:WxPusherEnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - var message = group.AddFeature( - name: WxPusherFeatureNames.Message.GroupName, - displayName: L("Features:Message"), - description: L("Features:Message")); - - message.CreateChild( + var messageEnableFeature = wxPusherEnableFeature.CreateChild( name: WxPusherFeatureNames.Message.Enable, defaultValue: "false", displayName: L("Features:MessageEnable"), description: L("Features:MessageEnableDesc"), valueType: new ToggleStringValueType(new BooleanValueValidator())); - message.CreateChild( + messageEnableFeature.CreateChild( name: WxPusherFeatureNames.Message.SendLimit, defaultValue: "500", displayName: L("Features:Message.SendLimit"), description: L("Features:Message.SendLimitDesc"), valueType: new FreeTextStringValueType(new NumericValueValidator(1, 500))); - message.CreateChild( + messageEnableFeature.CreateChild( name: WxPusherFeatureNames.Message.SendLimitInterval, defaultValue: "1", displayName: L("Features:Message.SendLimitInterval"),