You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.9 KiB
48 lines
1.9 KiB
using JetBrains.Annotations; |
|
using System; |
|
using System.Collections.Generic; |
|
using Volo.Abp; |
|
|
|
namespace Sanhe.Abp.Features.LimitValidation; |
|
|
|
public class AbpFeaturesLimitValidationOptions |
|
{ |
|
public IDictionary<LimitPolicy, Func<int, long>> EffectPolicys { get; } |
|
|
|
public AbpFeaturesLimitValidationOptions() |
|
{ |
|
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; }); |
|
} |
|
}
|
|
|