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.
49 lines
1.9 KiB
49 lines
1.9 KiB
3 years ago
|
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; });
|
||
|
}
|
||
|
}
|