feat(composition): add DNF conjunction argument merge strategy #8817
+300
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Current merge policies for
@authenticated,@requiresScopesand@policywere inconsistent.If single subgraph declared a field with one of the directives then it would restrict access to this supergraph field regardless which subgraph would resolve this field (results in AND rule for any applied auth directive, i.e.
@authenticatedAND@policyis required to access this field). If the same auth directive (@requiresScopes/@policy) were applied across the subgraphs then the resulting supergraph field could be resolved by fullfilling either one of the subgraph requirements (resulting in OR rule, i.e. either@policy1 or@policy2 has to be true to access the field). While arguably this allowed for easier schema evolution, it did result in weakening the security requirements.Since
@policyand@requiresScopesvalues are represent boolean conditions in Disjunctive Normal Form, we can merge them conjunctively to get the final auth requirements, i.e.This algorithm also deduplicates redundant requirements, e.g.
Partial backport of apollographql/federation#3321 and apollographql/federation#3343