Browse Source

remaed LINGYUN.Abp.Features.Validation

pull/104/head
cKey 5 years ago
parent
commit
df8a39e428
  1. 10
      aspnet-core/LINGYUN.MicroService.sln
  2. 6
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN.Abp.Features.LimitValidation.Redis.csproj
  3. 4
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesValidationRedisModule.cs
  4. 2
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/AbpRedisRequiresLimitFeatureOptions.cs
  5. 0
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/check.lua
  6. 0
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/process.lua
  7. 14
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureChecker.cs
  8. 0
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/BytesExtensions.cs
  9. 0
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/StringExtensions.cs
  10. 24
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN.Abp.Features.LimitValidation.csproj
  11. 33
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeatureLimitException.cs
  12. 35
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationModule.cs
  13. 6
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationOptions.cs
  14. 16
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptor.cs
  15. 6
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationInterceptorRegistrar.cs
  16. 4
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/IRequiresLimitFeatureChecker.cs
  17. 2
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/LimitPolicy.cs
  18. 9
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/FeaturesLimitValidationResource.cs
  19. 6
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/en.json
  20. 6
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/Localization/Resources/zh-Hans.json
  21. 6
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/NullRequiresLimitFeatureChecker.cs
  22. 2
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureAttribute.cs
  23. 8
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN/Abp/Features/LimitValidation/RequiresLimitFeatureContext.cs
  24. 43
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.en.md
  25. 43
      aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/README.md
  26. 14
      aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN.Abp.Features.Validation.csproj
  27. 20
      aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationModule.cs
  28. 14
      aspnet-core/modules/features/LINGYUN.Abp.FeatureManagement.Client/README.md
  29. 14
      aspnet-core/modules/features/LINGYUN.Abp.Features.Client/README.md
  30. 4
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj
  31. 9
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestBase.cs
  32. 6
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/AbpFeaturesLimitValidationRedisTestModule.cs
  33. 21
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN/Abp/Features/LimitValidation/Redis/RedisRequiresLimitFeatureCheckerTests.cs
  34. 2
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN.Abp.Features.LimitValidation.Tests.csproj
  35. 8
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestBase.cs
  36. 6
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/AbpFeaturesLimitValidationTestModule.cs
  37. 15
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FakeRequiresFeatureLimitChecker.cs
  38. 12
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/FeaturesLimitValidationTests.cs
  39. 2
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureDefinitionProvider.cs
  40. 2
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureNames.cs
  41. 2
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestFeatureTenant.cs
  42. 2
      aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN/Abp/Features/LimitValidation/TestValidationFeatureClass.cs
  43. 9
      aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestBase.cs
  44. 8
      aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestBase.cs

10
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

6
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN.Abp.Features.Validation.Redis.csproj → aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN.Abp.Features.LimitValidation.Redis.csproj

@ -15,12 +15,12 @@
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="LINGYUN\Abp\Features\Validation\Redis\Lua\*.lua" />
<Content Remove="LINGYUN\Abp\Features\Validation\Redis\Lua\*.lua" />
<EmbeddedResource Include="LINGYUN\Abp\Features\LimitValidation\Redis\Lua\*.lua" />
<Content Remove="LINGYUN\Abp\Features\LimitValidation\Redis\Lua\*.lua" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.Features.Validation\LINGYUN.Abp.Features.Validation.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj" />
</ItemGroup>
</Project>

4
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisModule.cs → 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)

2
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/AbpRedisRequiresLimitFeatureOptions.cs → 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<AbpRedisRequiresLimitFeatureOptions>
{

0
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/Lua/check.lua → aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/check.lua

0
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/Lua/process.lua → aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/LINGYUN/Abp/Features/LimitValidation/Redis/Lua/process.lua

14
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureChecker.cs → 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<RedisRequiresLimitFeatureChecker> Logger { protected get; set; }
@ -54,15 +53,12 @@ namespace LINGYUN.Abp.Features.Validation.Redis
Logger = NullLogger<RedisRequiresLimitFeatureChecker>.Instance;
}
public virtual async Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
public virtual async Task<bool> 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)

0
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/System/BytesExtensions.cs → aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/BytesExtensions.cs

0
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation.Redis/System/StringExtensions.cs → aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation.Redis/System/StringExtensions.cs

24
aspnet-core/modules/common/LINGYUN.Abp.Features.LimitValidation/LINGYUN.Abp.Features.LimitValidation.csproj

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<None Remove="LINGYUN\Abp\Features\LimitValidation\Localization\Resources\en.json" />
<None Remove="LINGYUN\Abp\Features\LimitValidation\Localization\Resources\zh-Hans.json" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="LINGYUN\Abp\Features\LimitValidation\Localization\Resources\en.json" />
<EmbeddedResource Include="LINGYUN\Abp\Features\LimitValidation\Localization\Resources\zh-Hans.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Features" Version="3.2.0" />
</ItemGroup>
</Project>

33
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
{
/// <summary>
/// 功能名称名称
/// </summary>
public string Feature { get; }
/// <summary>
/// 上限
/// </summary>
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<FeaturesLimitValidationResource>();
return localizer["FeaturesLimitException", Limit];
}
}
}

35
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<AbpFeaturesLimitValidationOptions>(options =>
{
options.MapDefaultEffectPolicys();
});
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpFeaturesLimitValidationModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<FeaturesLimitValidationResource>("en")
.AddVirtualJson("/LINGYUN/Abp/Features/LimitValidation/Localization/Resources");
});
}
}
}

6
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationOptions.cs → 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<LimitPolicy, Func<int, long>> EffectPolicys { get; }
public AbpFeaturesValidationOptions()
public AbpFeaturesLimitValidationOptions()
{
EffectPolicys = new Dictionary<LimitPolicy, Func<int, long>>();
}

16
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptor.cs → 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<AbpFeaturesValidationOptions> options)
IOptions<AbpFeaturesLimitValidationOptions> 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)

6
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/FeaturesValidationInterceptorRegistrar.cs → 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<FeaturesValidationInterceptor>();
context.Interceptors.TryAdd<FeaturesLimitValidationInterceptor>();
}
}

4
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/IRequiresLimitFeatureChecker.cs → 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<bool> CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default);
Task ProcessAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default);
}

2
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/LimitPolicy.cs → 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
{

9
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
{
}
}

6
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"
}
}

6
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},请申请适当的权限"
}
}

6
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/NullRequiresLimitFeatureChecker.cs → 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<bool> CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
{
return Task.CompletedTask;
return Task.FromResult(true);
}
public Task ProcessAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)

2
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureAttribute.cs → 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
{
/// <summary>
/// 单个功能的调用量限制

8
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/RequiresLimitFeatureContext.cs → 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 @@
/// </summary>
public int Interval { get; }
/// <summary>
/// 功能限制时长
/// 功能限制次数
/// </summary>
public int Limit { get; }
/// <summary>
@ -19,10 +19,10 @@
/// </summary>
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)

43
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<AbpFeaturesLimitValidationOptions>(options =>
{
options.MapEffectPolicy(LimitPolicy.Minute, (time) => return 60;); // Means that no matter how many minutes (time), only 60 seconds will be limited
});
}
}
```

43
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<AbpFeaturesLimitValidationOptions>(options =>
{
options.MapEffectPolicy(LimitPolicy.Minute, (time) => return 60;); // 表示不管多少分钟(time),都只会限制60秒
});
}
}
```

14
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN.Abp.Features.Validation.csproj

@ -1,14 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Features" Version="3.2.0" />
</ItemGroup>
</Project>

20
aspnet-core/modules/common/LINGYUN.Abp.Features.Validation/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationModule.cs

@ -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<AbpFeaturesValidationOptions>(options =>
{
options.MapDefaultEffectPolicys();
});
}
}
}

14
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
}
```

14
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
}
```

4
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN.Abp.Features.Validation.Redis.Tests.csproj → aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests/LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj

@ -15,8 +15,8 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\modules\common\LINGYUN.Abp.Features.Validation.Redis\LINGYUN.Abp.Features.Validation.Redis.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.Features.Validation.Tests\LINGYUN.Abp.Features.Validation.Tests.csproj" />
<ProjectReference Include="..\..\modules\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.Features.LimitValidation.Tests\LINGYUN.Abp.Features.LimitValidation.Tests.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj" />
</ItemGroup>

9
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<AbpFeaturesLimitValidationRedisTestModule>
{
}
}

6
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestModule.cs → 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)
{

21
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/RedisRequiresLimitFeatureCheckerTests.cs → 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<IOptions<AbpFeaturesValidationOptions>>().Value;
Options = GetRequiredService<IOptions<AbpFeaturesLimitValidationOptions>>().Value;
RequiresLimitFeatureChecker = GetRequiredService<IRequiresLimitFeatureChecker>();
TestValidationFeatureClass = GetRequiredService<TestValidationFeatureClass>();
}
@ -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<AbpAuthorizationException>(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();
}
}
}

2
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN.Abp.Features.Validation.Tests.csproj → aspnet-core/tests/LINGYUN.Abp.Features.LimitValidation.Tests/LINGYUN.Abp.Features.LimitValidation.Tests.csproj

@ -14,7 +14,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\modules\common\LINGYUN.Abp.Features.Validation\LINGYUN.Abp.Features.Validation.csproj" />
<ProjectReference Include="..\..\modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj" />
</ItemGroup>

8
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<AbpFeaturesLimitValidationTestModule>
{
}
}

6
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestModule.cs → 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)
{

15
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FakeRequiresFeatureLimitChecker.cs → 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<string, LimitFeature>();
}
public virtual Task CheckAsync(RequiresLimitFeatureContext context, CancellationToken cancellation = default)
public virtual Task<bool> 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)

12
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/FeaturesValidationTests.cs → 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<ICurrentTenant>();
TestValidationFeatureClass = GetRequiredService<TestValidationFeatureClass>();
@ -26,8 +27,7 @@ namespace LINGYUN.Abp.Features.Validation
// it's ok
await TestValidationFeatureClass.Test1MinuteAsync();
await TestValidationFeatureClass.Test1MinuteAsync();
await Assert.ThrowsAsync<AbpAuthorizationException>(async () =>
await Assert.ThrowsAsync<AbpFeatureLimitException>(async () =>
{
await TestValidationFeatureClass.Test1MinuteAsync();
});

2
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureDefinitionProvider.cs → 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
{

2
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureNames.cs → 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
{

2
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestFeatureTenant.cs → 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
{

2
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/TestValidationFeatureClass.cs → 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
{

9
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Redis.Tests/LINGYUN/Abp/Features/Validation/Redis/AbpFeaturesValidationRedisTestBase.cs

@ -1,9 +0,0 @@
using LINGYUN.Abp.Tests;
namespace LINGYUN.Abp.Features.Validation.Redis
{
public class AbpFeaturesValidationRedisTestBase : AbpTestsBase<AbpFeaturesValidationRedisTestModule>
{
}
}

8
aspnet-core/tests/LINGYUN.Abp.Features.Validation.Tests/LINGYUN/Abp/Features/Validation/AbpFeaturesValidationTestBase.cs

@ -1,8 +0,0 @@
using LINGYUN.Abp.Tests;
namespace LINGYUN.Abp.Features.Validation
{
public class AbpFeaturesValidationTestBase : AbpTestsBase<AbpFeaturesValidationTestModule>
{
}
}
Loading…
Cancel
Save