diff --git a/aspnet-core/LINGYUN.MicroService.sln b/aspnet-core/LINGYUN.MicroService.sln
index 09a69f980..6f27faf2b 100644
--- a/aspnet-core/LINGYUN.MicroService.sln
+++ b/aspnet-core/LINGYUN.MicroService.sln
@@ -217,13 +217,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer4
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "modules\common\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{6AA0785D-9B6C-4EAE-AB83-0C4CF2B6B473}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Validation", "modules\common\LINGYUN.Abp.Features.Validation\LINGYUN.Abp.Features.Validation.csproj", "{65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Validation.Redis", "modules\common\LINGYUN.Abp.Features.Validation.Redis\LINGYUN.Abp.Features.Validation.Redis.csproj", "{D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "modules\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Validation.Redis.Tests", "tests\LINGYUN.Abp.Features.Validation.Redis.Tests\LINGYUN.Abp.Features.Validation.Redis.Tests.csproj", "{F12F4645-C0FE-4129-8C71-65B4039DC445}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj", "{F12F4645-C0FE-4129-8C71-65B4039DC445}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Validation.Tests", "tests\LINGYUN.Abp.Features.Validation.Tests\LINGYUN.Abp.Features.Validation.Tests.csproj", "{C457FA70-8732-44B8-A018-C96D14025D4B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Tests\LINGYUN.Abp.Features.LimitValidation.Tests.csproj", "{C457FA70-8732-44B8-A018-C96D14025D4B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}"
EndProject
@@ -247,7 +247,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permission-management", "pe
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{B46D6DAF-98C6-441F-9FA5-3CAD7CF27727}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN.Abp.Features.Validation.Redis.csproj b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN.Abp.Features.LimitValidation.Redis.csproj
similarity index 67%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN.Abp.Features.Validation.Redis.csproj
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN.Abp.Features.LimitValidation.Redis.csproj
index 1c4ca9246..faff2f7ab 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN.Abp.Features.Validation.Redis.csproj
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN.Abp.Features.LimitValidation.Redis.csproj
@@ -15,12 +15,12 @@
-
-
+
+
-
+
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisModule.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesValidationRedisModule.cs
similarity index 89%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisModule.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesValidationRedisModule.cs
index 0168165aa..c328bb60e 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisModule.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesValidationRedisModule.cs
@@ -3,10 +3,10 @@ using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
-namespace LINGYUN.Abp.Features.Validation.Redis
+namespace LINGYUN.Abp.Features.LimitValidation.Redis
{
[DependsOn(
- typeof(AbpFeaturesValidationModule))]
+ typeof(AbpFeaturesLimitValidationModule))]
public class AbpFeaturesValidationRedisModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpRedisRequiresLimitFeatureOptions.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpRedisRequiresLimitFeatureOptions.cs
similarity index 90%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpRedisRequiresLimitFeatureOptions.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpRedisRequiresLimitFeatureOptions.cs
index af8fb5248..cd11120d2 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpRedisRequiresLimitFeatureOptions.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpRedisRequiresLimitFeatureOptions.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Options;
using StackExchange.Redis;
-namespace LINGYUN.Abp.Features.Validation.Redis
+namespace LINGYUN.Abp.Features.LimitValidation.Redis
{
public class AbpRedisRequiresLimitFeatureOptions : IOptions
{
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/Lua/check.lua b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/check.lua
similarity index 100%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/Lua/check.lua
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/check.lua
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/Lua/process.lua b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/process.lua
similarity index 100%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/Lua/process.lua
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/process.lua
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureChecker.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs
similarity index 93%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureChecker.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs
index 690df549f..c64feefb9 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureChecker.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs
@@ -8,18 +8,17 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp;
-using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
using Volo.Abp.VirtualFileSystem;
-namespace LINGYUN.Abp.Features.Validation.Redis
+namespace LINGYUN.Abp.Features.LimitValidation.Redis
{
[DisableConventionalRegistration]
public class RedisRequiresLimitFeatureChecker : IRequiresLimitFeatureChecker
{
- private const string CHECK_LUA_SCRIPT = "/LINGYUN/Abp/Features/Validation/Redis/Lua/check.lua";
- private const string PROCESS_LUA_SCRIPT = "/LINGYUN/Abp/Features/Validation/Redis/Lua/process.lua";
+ private const string CHECK_LUA_SCRIPT = "/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/check.lua";
+ private const string PROCESS_LUA_SCRIPT = "/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/process.lua";
public ILogger Logger { protected get; set; }
@@ -54,15 +53,12 @@ namespace LINGYUN.Abp.Features.Validation.Redis
Logger = NullLogger.Instance;
}
- public virtual async Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
+ public virtual async Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
{
await ConnectAsync(cancellation);
var result = await EvaluateAsync(CHECK_LUA_SCRIPT, context, cancellation);
- if (result + 1 > context.Limit)
- {
- throw new AbpAuthorizationException("已经超出功能次数限制,请联系管理员");
- }
+ return result + 1 <= context.Limit;
}
public virtual async Task ProcessAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/System/BytesExtensions.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/BytesExtensions.cs
similarity index 100%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/System/BytesExtensions.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/BytesExtensions.cs
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/System/StringExtensions.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/StringExtensions.cs
similarity index 100%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/System/StringExtensions.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/StringExtensions.cs
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
new file mode 100644
index 000000000..f7ad8f2ee
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN.Abp.Features.LimitValidation.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeatureLimitException.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeatureLimitException.cs
new file mode 100644
index 000000000..6e13b5006
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeatureLimitException.cs
@@ -0,0 +1,33 @@
+using LINGYUN.Abp.Features.LimitValidation.Localization;
+using Microsoft.Extensions.Localization;
+using Volo.Abp;
+using Volo.Abp.ExceptionHandling;
+using Volo.Abp.Localization;
+
+namespace LINGYUN.Abp.Features.LimitValidation
+{
+ public class AbpFeatureLimitException : AbpException, ILocalizeErrorMessage, IBusinessException
+ {
+ ///
+ /// 功能名称名称
+ ///
+ public string Feature { get; }
+ ///
+ /// 上限
+ ///
+ public int Limit { get; }
+
+ public AbpFeatureLimitException(string feature, int limit)
+ : base($"Features {feature} has exceeded the maximum number of calls {limit}, please apply for the appropriate permission")
+ {
+ Feature = feature;
+ Limit = limit;
+ }
+ public string LocalizeMessage(LocalizationContext context)
+ {
+ var localizer = context.LocalizerFactory.Create();
+
+ return localizer["FeaturesLimitException", Limit];
+ }
+ }
+}
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
new file mode 100644
index 000000000..73651a62b
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationModule.cs
@@ -0,0 +1,35 @@
+using LINGYUN.Abp.Features.LimitValidation.Localization;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Features;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.VirtualFileSystem;
+
+namespace LINGYUN.Abp.Features.LimitValidation
+{
+ [DependsOn(typeof(AbpFeaturesModule))]
+ public class AbpFeaturesLimitValidationModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.OnRegistred(FeaturesLimitValidationInterceptorRegistrar.RegisterIfNeeded);
+
+ Configure(options =>
+ {
+ options.MapDefaultEffectPolicys();
+ });
+
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Add("en")
+ .AddVirtualJson("/LINGYUN/Abp/Features/LimitValidation/Localization/Resources");
+ });
+ }
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationOptions.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs
similarity index 92%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationOptions.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs
index f26d98f0c..153841767 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationOptions.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs
@@ -3,12 +3,12 @@ using System;
using System.Collections.Generic;
using Volo.Abp;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
- public class AbpFeaturesValidationOptions
+ public class AbpFeaturesLimitValidationOptions
{
public IDictionary> EffectPolicys { get; }
- public AbpFeaturesValidationOptions()
+ public AbpFeaturesLimitValidationOptions()
{
EffectPolicys = new Dictionary>();
}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptor.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptor.cs
similarity index 87%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptor.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptor.cs
index 5093d4bff..8fda52f0e 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptor.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptor.cs
@@ -7,20 +7,20 @@ using Volo.Abp.DynamicProxy;
using Volo.Abp.Features;
using Volo.Abp.Validation.StringValues;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
- public class FeaturesValidationInterceptor : AbpInterceptor, ITransientDependency
+ public class FeaturesLimitValidationInterceptor : AbpInterceptor, ITransientDependency
{
private readonly IFeatureChecker _featureChecker;
- private readonly AbpFeaturesValidationOptions _options;
+ private readonly AbpFeaturesLimitValidationOptions _options;
private readonly IRequiresLimitFeatureChecker _limitFeatureChecker;
private readonly IFeatureDefinitionManager _featureDefinitionManager;
- public FeaturesValidationInterceptor(
+ public FeaturesLimitValidationInterceptor(
IFeatureChecker featureChecker,
IRequiresLimitFeatureChecker limitFeatureChecker,
IFeatureDefinitionManager featureDefinitionManager,
- IOptions options)
+ IOptions options)
{
_options = options.Value;
_featureChecker = featureChecker;
@@ -62,7 +62,11 @@ namespace LINGYUN.Abp.Features.Validation
protected virtual async Task PreCheckFeatureAsync(RequiresLimitFeatureContext context)
{
- await _limitFeatureChecker.CheckAsync(context);
+ var allowed = await _limitFeatureChecker.CheckAsync(context);
+ if (!allowed)
+ {
+ throw new AbpFeatureLimitException(context.LimitFeature, context.Limit);
+ }
}
protected virtual async Task PostCheckFeatureAsync(RequiresLimitFeatureContext context)
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptorRegistrar.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptorRegistrar.cs
similarity index 85%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptorRegistrar.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptorRegistrar.cs
index 40f7fa486..baf7ad4c2 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptorRegistrar.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptorRegistrar.cs
@@ -4,15 +4,15 @@ using System.Reflection;
using Volo.Abp.DependencyInjection;
using Volo.Abp.DynamicProxy;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
- public static class FeaturesValidationInterceptorRegistrar
+ public static class FeaturesLimitValidationInterceptorRegistrar
{
public static void RegisterIfNeeded(IOnServiceRegistredContext context)
{
if (ShouldIntercept(context.ImplementationType))
{
- context.Interceptors.TryAdd();
+ context.Interceptors.TryAdd();
}
}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/IRequiresLimitFeatureChecker.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/IRequiresLimitFeatureChecker.cs
similarity index 59%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/IRequiresLimitFeatureChecker.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/IRequiresLimitFeatureChecker.cs
index cc73875d5..73c2349aa 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/IRequiresLimitFeatureChecker.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/IRequiresLimitFeatureChecker.cs
@@ -1,11 +1,11 @@
using System.Threading;
using System.Threading.Tasks;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public interface IRequiresLimitFeatureChecker
{
- Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default);
+ Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default);
Task ProcessAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default);
}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/LimitPolicy.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/LimitPolicy.cs
similarity index 92%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/LimitPolicy.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/LimitPolicy.cs
index 587e13675..1983239ce 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/LimitPolicy.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/LimitPolicy.cs
@@ -1,4 +1,4 @@
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public enum LimitPolicy : byte
{
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/FeaturesLimitValidationResource.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/FeaturesLimitValidationResource.cs
new file mode 100644
index 000000000..6773048d3
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/FeaturesLimitValidationResource.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.Localization;
+
+namespace LINGYUN.Abp.Features.LimitValidation.Localization
+{
+ [LocalizationResourceName("AbpFeaturesLimitValidation")]
+ public class FeaturesLimitValidationResource
+ {
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/en.json b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/en.json
new file mode 100644
index 000000000..46799f19f
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/en.json
@@ -0,0 +1,6 @@
+{
+ "culture": "en",
+ "texts": {
+ "FeaturesLimitException": "Service has exceeded the maximum number of calls {0}. Please apply for the appropriate permissions"
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/zh-Hans.json b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/zh-Hans.json
new file mode 100644
index 000000000..cb948209e
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/zh-Hans.json
@@ -0,0 +1,6 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "FeaturesLimitException": "服务已超过最大调用次数 {0},请申请适当的权限"
+ }
+}
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/NullRequiresLimitFeatureChecker.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/NullRequiresLimitFeatureChecker.cs
similarity index 66%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/NullRequiresLimitFeatureChecker.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/NullRequiresLimitFeatureChecker.cs
index e6bed432c..0c94ec787 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/NullRequiresLimitFeatureChecker.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/NullRequiresLimitFeatureChecker.cs
@@ -2,13 +2,13 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public class NullRequiresLimitFeatureChecker : IRequiresLimitFeatureChecker, ISingletonDependency
{
- public Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
+ public Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
{
- return Task.CompletedTask;
+ return Task.FromResult(true);
}
public Task ProcessAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureAttribute.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureAttribute.cs
similarity index 97%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureAttribute.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureAttribute.cs
index 23e39ec48..8ed810a22 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureAttribute.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureAttribute.cs
@@ -2,7 +2,7 @@
using System;
using Volo.Abp;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
///
/// 单个功能的调用量限制
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureContext.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs
similarity index 84%
rename from aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureContext.cs
rename to aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs
index 7e15f1e4f..ab8a8f8e7 100644
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureContext.cs
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs
@@ -1,4 +1,4 @@
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public class RequiresLimitFeatureContext
{
@@ -11,7 +11,7 @@
///
public int Interval { get; }
///
- /// 功能限制时长
+ /// 功能限制次数
///
public int Limit { get; }
///
@@ -19,10 +19,10 @@
///
public string LimitFeature { get; }
- public AbpFeaturesValidationOptions Options { get; }
+ public AbpFeaturesLimitValidationOptions Options { get; }
public RequiresLimitFeatureContext(
string limitFeature,
- AbpFeaturesValidationOptions options,
+ AbpFeaturesLimitValidationOptions options,
LimitPolicy policy = LimitPolicy.Month,
int interval = 1,
int limit = 1)
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
new file mode 100644
index 000000000..4e1aa34cf
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.en.md
@@ -0,0 +1,43 @@
+English | [简体中文](./README.md)
+
+# LINGYUN.Abp.Features.LimitValidation
+
+Features limit validation component
+
+Check the number of function calls defined to limit calls to the application by specific entities (tenants, users, clients, and so on)
+
+Predefined policy
+
+LimitPolicy.Minute Calculate the flow by the minutes
+LimitPolicy.Hours Calculate the flow by the hours
+LimitPolicy.Days Calculate the flow by days
+LimitPolicy.Weeks Calculate the flow by weeks
+LimitPolicy.Month Calculate the flow by the number of month
+LimitPolicy.Years Calculate the flow by the number of years
+
+## How to use
+
+
+```csharp
+[DependsOn(typeof(AbpFeaturesLimitValidationModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
+```
+
+If you want to limit the policy duration by self-processing, override the default policy for the corresponding policy and always return a clock scale in seconds
+
+```csharp
+[DependsOn(typeof(AbpFeaturesLimitValidationModule))]
+public class YouProjectModule : AbpModule
+{
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.MapEffectPolicy(LimitPolicy.Minute, (time) => 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
new file mode 100644
index 000000000..b52c3a723
--- /dev/null
+++ b/aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.md
@@ -0,0 +1,43 @@
+[English](./README.en.md) | 简体中文
+
+# LINGYUN.Abp.Features.LimitValidation
+
+功能上限验证组件
+
+检查定义的功能调用次数,来限制特定的实体(租户、用户、客户端等)对于应用程序的调用
+
+预先设定了如下几个策略
+
+LimitPolicy.Minute 按分钟计算流量
+LimitPolicy.Hours 按小时计算流量
+LimitPolicy.Days 按天数计算流量
+LimitPolicy.Weeks 按周数计算流量
+LimitPolicy.Month 按月数计算流量
+LimitPolicy.Years 按年数计算流量
+
+## 配置使用
+
+
+```csharp
+[DependsOn(typeof(AbpFeaturesLimitValidationModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
+```
+
+如果需要自行处理功能限制策略时长,请覆盖对应策略的默认策略,返回的时钟刻度单位始终是秒
+
+```csharp
+[DependsOn(typeof(AbpFeaturesLimitValidationModule))]
+public class YouProjectModule : AbpModule
+{
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.MapEffectPolicy(LimitPolicy.Minute, (time) => return 60;); // 表示不管多少分钟(time),都只会限制60秒
+ });
+ }
+}
+```
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN.Abp.Features.Validation.csproj b/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN.Abp.Features.Validation.csproj
deleted file mode 100644
index 17100e0ef..000000000
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN.Abp.Features.Validation.csproj
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
- netstandard2.0
-
-
-
-
-
-
-
-
diff --git a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationModule.cs b/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationModule.cs
deleted file mode 100644
index 7fb56873b..000000000
--- a/aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationModule.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Microsoft.Extensions.DependencyInjection;
-using Volo.Abp.Features;
-using Volo.Abp.Modularity;
-
-namespace LINGYUN.Abp.Features.Validation
-{
- [DependsOn(typeof(AbpFeaturesModule))]
- public class AbpFeaturesValidationModule : AbpModule
- {
- public override void PreConfigureServices(ServiceConfigurationContext context)
- {
- context.Services.OnRegistred(FeaturesValidationInterceptorRegistrar.RegisterIfNeeded);
-
- Configure(options =>
- {
- options.MapDefaultEffectPolicys();
- });
- }
- }
-}
diff --git a/aspnet-core/modules/features/LINGYUN.Abp.FeatureManagement.Client/README.md b/aspnet-core/modules/features/LINGYUN.Abp.FeatureManagement.Client/README.md
new file mode 100644
index 000000000..46b62020b
--- /dev/null
+++ b/aspnet-core/modules/features/LINGYUN.Abp.FeatureManagement.Client/README.md
@@ -0,0 +1,14 @@
+# LINGYUN.Abp.FeatureManagement.Client
+
+针对客户端的功能验证管理授权
+
+## 配置使用
+
+
+```csharp
+[DependsOn(typeof(AbpFeatureManagementClientModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
+```
diff --git a/aspnet-core/modules/features/LINGYUN.Abp.Features.Client/README.md b/aspnet-core/modules/features/LINGYUN.Abp.Features.Client/README.md
new file mode 100644
index 000000000..88ae06140
--- /dev/null
+++ b/aspnet-core/modules/features/LINGYUN.Abp.Features.Client/README.md
@@ -0,0 +1,14 @@
+# LINGYUN.Abp.Features.Client
+
+针对客户端的功能验证
+
+## 配置使用
+
+
+```csharp
+[DependsOn(typeof(AbpFeaturesClientModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
+```
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN.Abp.Features.Validation.Redis.Tests.csproj b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj
similarity index 75%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN.Abp.Features.Validation.Redis.Tests.csproj
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj
index ae4b84013..46deef7a3 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN.Abp.Features.Validation.Redis.Tests.csproj
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj
@@ -15,8 +15,8 @@
-
-
+
+
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestBase.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestBase.cs
new file mode 100644
index 000000000..a198c37cf
--- /dev/null
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestBase.cs
@@ -0,0 +1,9 @@
+using LINGYUN.Abp.Tests;
+
+namespace LINGYUN.Abp.Features.LimitValidation.Redis
+{
+ public class AbpFeaturesLimitValidationRedisTestBase : AbpTestsBase
+ {
+
+ }
+}
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestModule.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestModule.cs
similarity index 80%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestModule.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestModule.cs
index 827e67adf..0a03e7df7 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestModule.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestModule.cs
@@ -3,13 +3,13 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
-namespace LINGYUN.Abp.Features.Validation.Redis
+namespace LINGYUN.Abp.Features.LimitValidation.Redis
{
[DependsOn(
- typeof(AbpFeaturesValidationTestModule),
+ typeof(AbpFeaturesLimitValidationTestModule),
typeof(AbpFeaturesValidationRedisModule),
typeof(AbpTestsBaseModule))]
- public class AbpFeaturesValidationRedisTestModule : AbpModule
+ public class AbpFeaturesLimitValidationRedisTestModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureCheckerTests.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureCheckerTests.cs
similarity index 77%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureCheckerTests.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureCheckerTests.cs
index 56d23ad92..f3cdecd8c 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureCheckerTests.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureCheckerTests.cs
@@ -1,21 +1,19 @@
using Microsoft.Extensions.Options;
using Shouldly;
-using System;
using System.Threading;
using System.Threading.Tasks;
-using Volo.Abp.Authorization;
using Xunit;
-namespace LINGYUN.Abp.Features.Validation.Redis
+namespace LINGYUN.Abp.Features.LimitValidation.Redis
{
- public class RedisRequiresLimitFeatureCheckerTests : AbpFeaturesValidationRedisTestBase
+ public class RedisRequiresLimitFeatureCheckerTests : AbpFeaturesLimitValidationRedisTestBase
{
- protected AbpFeaturesValidationOptions Options { get; }
+ protected AbpFeaturesLimitValidationOptions Options { get; }
protected IRequiresLimitFeatureChecker RequiresLimitFeatureChecker { get; }
protected TestValidationFeatureClass TestValidationFeatureClass { get; }
public RedisRequiresLimitFeatureCheckerTests()
{
- Options = GetRequiredService>().Value;
+ Options = GetRequiredService>().Value;
RequiresLimitFeatureChecker = GetRequiredService();
TestValidationFeatureClass = GetRequiredService();
}
@@ -43,13 +41,14 @@ namespace LINGYUN.Abp.Features.Validation.Redis
await RequiresLimitFeatureChecker.ProcessAsync(context);
await RequiresLimitFeatureChecker.ProcessAsync(context);
await RequiresLimitFeatureChecker.ProcessAsync(context);
- await Assert.ThrowsAsync(async () =>
- {
- await RequiresLimitFeatureChecker.CheckAsync(context);
- });
+
+ var current = await RequiresLimitFeatureChecker.CheckAsync(context);
+ current.ShouldBeFalse();
+
Thread.Sleep(61000);
// it's ok
- await RequiresLimitFeatureChecker.ProcessAsync(context);
+ var nowCheckResult = await RequiresLimitFeatureChecker.CheckAsync(context);
+ nowCheckResult.ShouldBeTrue();
}
}
}
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN.Abp.Features.Validation.Tests.csproj b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN.Abp.Features.LimitValidation.Tests.csproj
similarity index 90%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN.Abp.Features.Validation.Tests.csproj
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN.Abp.Features.LimitValidation.Tests.csproj
index 9811616e6..3b0dad961 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN.Abp.Features.Validation.Tests.csproj
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN.Abp.Features.LimitValidation.Tests.csproj
@@ -14,7 +14,7 @@
-
+
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestBase.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestBase.cs
new file mode 100644
index 000000000..32e6d083c
--- /dev/null
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestBase.cs
@@ -0,0 +1,8 @@
+using LINGYUN.Abp.Tests;
+
+namespace LINGYUN.Abp.Features.LimitValidation
+{
+ public class AbpFeaturesLimitValidationTestBase : AbpTestsBase
+ {
+ }
+}
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestModule.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestModule.cs
similarity index 79%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestModule.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestModule.cs
index 16ee3c2e4..b426f91a1 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestModule.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestModule.cs
@@ -2,12 +2,12 @@ using LINGYUN.Abp.Tests;
using LINGYUN.Abp.Tests.Features;
using Volo.Abp.Modularity;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
[DependsOn(
typeof(AbpTestsBaseModule),
- typeof(AbpFeaturesValidationModule))]
- public class AbpFeaturesValidationTestModule : AbpModule
+ typeof(AbpFeaturesLimitValidationModule))]
+ public class AbpFeaturesLimitValidationTestModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FakeRequiresFeatureLimitChecker.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FakeRequiresFeatureLimitChecker.cs
similarity index 77%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FakeRequiresFeatureLimitChecker.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FakeRequiresFeatureLimitChecker.cs
index 231ebe6ad..e0d9f5262 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FakeRequiresFeatureLimitChecker.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FakeRequiresFeatureLimitChecker.cs
@@ -3,10 +3,9 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
-using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
[Dependency(ServiceLifetime.Singleton, ReplaceServices = true)]
[ExposeServices(typeof(IRequiresLimitFeatureChecker))]
@@ -19,22 +18,18 @@ namespace LINGYUN.Abp.Features.Validation
limitFeatures = new Dictionary();
}
- public virtual Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
+ public virtual Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
{
if (limitFeatures.ContainsKey(context.LimitFeature))
{
if (limitFeatures[context.LimitFeature].ExprieTime <= DateTime.Now)
{
limitFeatures.Remove(context.LimitFeature);
- return Task.CompletedTask;
- }
- if (limitFeatures[context.LimitFeature].Limit + 1 > context.Limit)
- {
- throw new AbpAuthorizationException("已经超出功能次数限制,请联系管理员");
+ return Task.FromResult(true);
}
+ return Task.FromResult(limitFeatures[context.LimitFeature].Limit + 1 <= context.Limit);
}
-
- return Task.CompletedTask;
+ return Task.FromResult(true);
}
public Task ProcessAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FeaturesValidationTests.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationTests.cs
similarity index 82%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FeaturesValidationTests.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationTests.cs
index 24ab8ccec..1f29da6a9 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FeaturesValidationTests.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationTests.cs
@@ -1,17 +1,18 @@
-using System;
+using Shouldly;
+using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Authorization;
using Volo.Abp.MultiTenancy;
using Xunit;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
- public class FeaturesValidationTests : AbpFeaturesValidationTestBase
+ public class FeaturesLimitValidationTests : AbpFeaturesLimitValidationTestBase
{
protected ICurrentTenant CurrentTenant { get; }
protected TestValidationFeatureClass TestValidationFeatureClass { get; }
- public FeaturesValidationTests()
+ public FeaturesLimitValidationTests()
{
CurrentTenant = GetRequiredService();
TestValidationFeatureClass = GetRequiredService();
@@ -26,8 +27,7 @@ namespace LINGYUN.Abp.Features.Validation
// it's ok
await TestValidationFeatureClass.Test1MinuteAsync();
await TestValidationFeatureClass.Test1MinuteAsync();
-
- await Assert.ThrowsAsync(async () =>
+ await Assert.ThrowsAsync(async () =>
{
await TestValidationFeatureClass.Test1MinuteAsync();
});
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureDefinitionProvider.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureDefinitionProvider.cs
similarity index 94%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureDefinitionProvider.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureDefinitionProvider.cs
index 726e40ac8..7648ec438 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureDefinitionProvider.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureDefinitionProvider.cs
@@ -1,7 +1,7 @@
using Volo.Abp.Features;
using Volo.Abp.Validation.StringValues;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public class TestFeatureDefinitionProvider : FeatureDefinitionProvider
{
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureNames.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureNames.cs
similarity index 85%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureNames.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureNames.cs
index 5916df1c6..e07529290 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureNames.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureNames.cs
@@ -1,4 +1,4 @@
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public class TestFeatureNames
{
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureTenant.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureTenant.cs
similarity index 72%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureTenant.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureTenant.cs
index 658f72478..234807f32 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureTenant.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureTenant.cs
@@ -1,4 +1,4 @@
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public class TestFeatureTenant
{
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestValidationFeatureClass.cs b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestValidationFeatureClass.cs
similarity index 91%
rename from aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestValidationFeatureClass.cs
rename to aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestValidationFeatureClass.cs
index 6d7cb355e..a55de395e 100644
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestValidationFeatureClass.cs
+++ b/aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestValidationFeatureClass.cs
@@ -3,7 +3,7 @@ using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
-namespace LINGYUN.Abp.Features.Validation
+namespace LINGYUN.Abp.Features.LimitValidation
{
public class TestValidationFeatureClass : ITransientDependency
{
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestBase.cs b/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestBase.cs
deleted file mode 100644
index 55ee092dc..000000000
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestBase.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using LINGYUN.Abp.Tests;
-
-namespace LINGYUN.Abp.Features.Validation.Redis
-{
- public class AbpFeaturesValidationRedisTestBase : AbpTestsBase
- {
-
- }
-}
diff --git a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestBase.cs b/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestBase.cs
deleted file mode 100644
index 9aa794120..000000000
--- a/aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestBase.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using LINGYUN.Abp.Tests;
-
-namespace LINGYUN.Abp.Features.Validation
-{
- public class AbpFeaturesValidationTestBase : AbpTestsBase
- {
- }
-}