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); }