/// <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);
            }
        }
Exemplo n.º 2
0
 public RequiresLimitFeatureContext(
     string limitFeature,
     AbpFeaturesLimitValidationOptions options,
     LimitPolicy policy = LimitPolicy.Month,
     int interval       = 1,
     int limit          = 1)
 {
     Limit        = limit;
     Policy       = policy;
     Interval     = interval;
     LimitFeature = limitFeature;
     Options      = options;
 }
        public RequiresLimitFeatureAttribute(
            [NotNull] string limitFeature,
            [NotNull] string intervalFeature,
            LimitPolicy policy  = LimitPolicy.Month,
            int defaultLimit    = 1,
            int defaultInterval = 1)
        {
            Check.NotNullOrWhiteSpace(limitFeature, nameof(limitFeature));
            Check.NotNullOrWhiteSpace(intervalFeature, nameof(intervalFeature));

            Policy          = policy;
            LimitFeature    = limitFeature;
            DefaultLimit    = defaultLimit;
            IntervalFeature = intervalFeature;
            DefaultInterval = defaultInterval;
        }
        public LimitPolicy ParsePolicy(string str)
        {
            var         strArray = str.Split(',', ';').Where(x => !string.IsNullOrEmpty(x));
            LimitPolicy result   = new LimitPolicy();

            foreach (var s in strArray)
            {
                var rule = s.Split(':');
                if (rule.Length < 2)
                {
                    throw new Exception($"unknown policy string : {s}");
                }
                var seconds = ConvertToSecond(rule[0]);
                var times   = Convert.ToInt32(rule[1]);
                result.Add(seconds, times);
            }
            return(result);
        }