protected override void innerExecute(IRuleContext context){
     var activations = ExtractActivations(context);
     if (null == activations){
         var result = DefaultResult;
         if (CustomDefaultResultRetriever.yes()){
             result = CustomDefaultResultRetriever(context.Descriptor(), this);
         }
         context.SetControllerRuleResult(result);
     }
     else{
         base.innerExecute(context);
     }
 }
        protected override bool innerTest(IRuleContext context){
            var ctx = context.Descriptor();
            if (null == ctx){
                return false;
            }

            if (CustomApplyChecker.yes()){
                return CustomApplyChecker(ctx, this);
            }

            if (Area.yes() && ctx.Area.ToUpper() != Area.ToUpper()){
                return false;
            }
            if (Category.yes() && !ctx.Category.like(Category, RegexOptions.IgnoreCase)){
                return false;
            }
            if (Controller.yes() && ctx.Name.ToUpper() != Controller.ToUpper()){
                return false;
            }
            if (Action.yes() && ctx.Action.ToUpper() != Action.ToUpper()){
                return false;
            }
            if (Domain.yes() && ctx.User.Identity.Name.toDomain().ToUpper() != Domain.ToUpper()){
                return false;
            }
            if (Role.yes() && !CheckIsUserInRole(ctx)){
                return false;
            }
            //FIXED: TODO : Нужна все таки проверка домена - сделано через дополнительный параметр UseDomain bool, default False
            if (User.yes() &&
                !(ctx.User.toUserName(UseDomain).ToUpper() == User.ToUpper())){
                return false;
            }
            if (Url.yes() && !ctx.Url.like(Url, RegexOptions.IgnoreCase)){
                return false;
            }
            if (Parameters.yes() && !ctx.ParametersString.like(Parameters, RegexOptions.IgnoreCase)){
                return false;
            }

            return true;
        }