committed by
GitHub
18 changed files with 205 additions and 128 deletions
@ -1,4 +1,4 @@ |
|||||
if (redis.call('EXISTS', KEYS[1]) == 0) then |
if (redis.call('EXISTS', KEYS[1]) == 0) then |
||||
redis.call('SETEX',KEYS[1],ARGV[1], 0) |
return 0 |
||||
end |
end |
||||
return tonumber(redis.call('GET', KEYS[1])) |
return tonumber(redis.call('GET', KEYS[1])) |
||||
@ -1,6 +1,6 @@ |
|||||
if (redis.call('EXISTS',KEYS[1]) ~= 0) then |
if (redis.call('EXISTS',KEYS[1]) ~= 0) then |
||||
redis.call('INCRBY',KEYS[1], 1) |
redis.call('INCRBY',KEYS[1], 1) |
||||
else |
else |
||||
redis.call('SETEX',KEYS[1],ARGV[1],0) |
redis.call('SETEX',KEYS[1],ARGV[1],1) |
||||
end |
end |
||||
return tonumber(redis.call('GET',KEYS[1])) |
return tonumber(redis.call('GET',KEYS[1])) |
||||
@ -0,0 +1,47 @@ |
|||||
|
using JetBrains.Annotations; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using Volo.Abp; |
||||
|
|
||||
|
namespace LINGYUN.Abp.Features.Validation |
||||
|
{ |
||||
|
public class AbpFeaturesValidationOptions |
||||
|
{ |
||||
|
public IDictionary<LimitPolicy, Func<int, long>> EffectPolicys { get; } |
||||
|
public AbpFeaturesValidationOptions() |
||||
|
{ |
||||
|
EffectPolicys = new Dictionary<LimitPolicy, Func<int, long>>(); |
||||
|
} |
||||
|
/// <summary>
|
||||
|
/// 变更功能限制策略时长计算方法
|
||||
|
/// </summary>
|
||||
|
/// <param name="policy">限制策略</param>
|
||||
|
/// <param name="func">自定义的计算方法</param>
|
||||
|
/// <remarks>
|
||||
|
/// 返回值一定要是秒钟刻度
|
||||
|
/// </remarks>
|
||||
|
public void MapEffectPolicy(LimitPolicy policy,[NotNull] Func<int, long> func) |
||||
|
{ |
||||
|
Check.NotNull(func, nameof(func)); |
||||
|
|
||||
|
if (EffectPolicys.ContainsKey(policy)) |
||||
|
{ |
||||
|
EffectPolicys[policy] = func; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
EffectPolicys.Add(policy, func); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
internal void MapDefaultEffectPolicys() |
||||
|
{ |
||||
|
MapEffectPolicy(LimitPolicy.Minute, (time) => { return (long)(DateTimeOffset.UtcNow.AddMinutes(time) - DateTimeOffset.UtcNow).TotalSeconds; }); |
||||
|
MapEffectPolicy(LimitPolicy.Hours, (time) => { return (long)(DateTimeOffset.UtcNow.AddHours(time) - DateTimeOffset.UtcNow).TotalSeconds; }); |
||||
|
MapEffectPolicy(LimitPolicy.Days, (time) => { return (long)(DateTimeOffset.UtcNow.AddDays(time) - DateTimeOffset.UtcNow).TotalSeconds; }); |
||||
|
MapEffectPolicy(LimitPolicy.Weeks, (time) => { return (long)(DateTimeOffset.UtcNow.AddDays(time * 7) - DateTimeOffset.UtcNow).TotalSeconds; }); |
||||
|
MapEffectPolicy(LimitPolicy.Month, (time) => { return (long)(DateTimeOffset.UtcNow.AddMonths(time) - DateTimeOffset.UtcNow).TotalSeconds; }); |
||||
|
MapEffectPolicy(LimitPolicy.Years, (time) => { return (long)(DateTimeOffset.UtcNow.AddYears(time) - DateTimeOffset.UtcNow).TotalSeconds; }); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,26 +1,30 @@ |
|||||
namespace LINGYUN.Abp.Features.Validation |
namespace LINGYUN.Abp.Features.Validation |
||||
{ |
{ |
||||
public enum LimitPolicy |
public enum LimitPolicy : byte |
||||
{ |
{ |
||||
|
/// <summary>
|
||||
|
/// 按分钟限制
|
||||
|
/// </summary>
|
||||
|
Minute = 0, |
||||
/// <summary>
|
/// <summary>
|
||||
/// 按小时限制
|
/// 按小时限制
|
||||
/// </summary>
|
/// </summary>
|
||||
Hours = 0, |
Hours = 10, |
||||
/// <summary>
|
/// <summary>
|
||||
/// 按天限制
|
/// 按天限制
|
||||
/// </summary>
|
/// </summary>
|
||||
Days = 1, |
Days = 20, |
||||
/// <summary>
|
/// <summary>
|
||||
/// 按周限制
|
/// 按周限制
|
||||
/// </summary>
|
/// </summary>
|
||||
Weeks = 2, |
Weeks = 30, |
||||
/// <summary>
|
/// <summary>
|
||||
/// 按月限制
|
/// 按月限制
|
||||
/// </summary>
|
/// </summary>
|
||||
Month = 3, |
Month = 40, |
||||
/// <summary>
|
/// <summary>
|
||||
/// 按年限制
|
/// 按年限制
|
||||
/// </summary>
|
/// </summary>
|
||||
Years = 4 |
Years = 50 |
||||
} |
} |
||||
} |
} |
||||
|
|||||
Loading…
Reference in new issue