public async Task <AuthorizationResult> AuthorizeAsync(IAuthorizationContext <TModel> authContext)
        {
            var delegatedFieldType     = ResolvedType.GetField(DelegateFieldName);
            var executionStragyHelpers = authContext.Resolve <IExecutionStrategyHelpers>();
            var delegatedNode          = executionStragyHelpers.BuildExecutionNode(
                authContext.ExecutionNode,
                delegatedFieldType.ResolvedType,
                authContext.ExecutionNode.Field,
                delegatedFieldType
                );

            var delegateID     = IDGetter(authContext.Subject);
            var modelLoader    = authContext.Resolve <IModelLoader>();
            var delegateResult = await modelLoader.FindAsync <TDelegate, TDelegateID>(delegateID);

            delegatedNode.Result = delegateResult;
            var result = await authContext
                         .Resolve <TDelegateType>()
                         .AuthorizeAsync <TDelegate>(authContext.ExecutionContext, delegatedNode);

            if (result is Allow <TDelegate> )
            {
                return(new Allow <TModel>(this));
            }
            return(result);
        }