[Fusion] Add support for merging @authorize directives#9378
Conversation
Fusion Gateway Performance Results
Simple Composite Query
Response Times
Deep Recursion Query
Response Times
Variable Batching Throughput
Response Times
Runner 1 = benchmarking-1Run 23187017560 • Commit 19f5cc3 • Tue, 17 Mar 2026 09:18:50 GMT |
There was a problem hiding this comment.
Pull request overview
Adds composition-time support for merging @authorize directives across source schemas in Fusion composition, including a canonical directive definition and directive merger logic, plus snapshot-style tests validating expected merge results.
Changes:
- Introduces
AuthorizeDirectiveMergerand related directive/type definitions (@authorize,ApplyPolicy) to canonicalize and merge directives. - Wires
@authorizemerging intoSourceSchemaMergerfor object types and output fields. - Adds composition tests covering multiple
@authorizemerging scenarios (policies, roles, apply-policy combinations).
Reviewed changes
Copilot reviewed 11 out of 12 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/HotChocolate/Fusion/test/Fusion.Composition.Tests/SourceSchemaMerger.AuthorizeDirective.Tests.cs | Adds snapshot tests validating @authorize merging behaviors. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownTypeNames.cs | Adds well-known type name constant for ApplyPolicy. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownDirectiveNames.cs | Adds well-known directive name constant for authorize. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownArgumentNames.cs | Adds well-known argument name constants for apply, policy, and roles. |
| src/HotChocolate/Fusion/src/Fusion.Composition/SourceSchemaMerger.cs | Registers and applies the new AuthorizeDirectiveMerger during merge. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.resx | Adds localized error messages for invalid @authorize argument values. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.Designer.cs | Generated resource accessors for the new messages. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Directives/AuthorizeDirective.cs | Adds parsing/normalization for @authorize directive instances. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Directives/ApplyPolicy.cs | Defines ApplyPolicy enum used by composition-side parsing/merging. |
| src/HotChocolate/Fusion/src/Fusion.Composition/DirectiveMergers/AuthorizeDirectiveMerger.cs | Implements directive deduplication and merged directive emission. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Definitions/AuthorizeMutableDirectiveDefinition.cs | Adds canonical mutable definition for @authorize. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Definitions/ApplyPolicyMutableEnumTypeDefinition.cs | Adds mutable enum definition for ApplyPolicy to support the canonical directive definition. |
Files not reviewed (1)
- src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.Designer.cs: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Adds first-class composition support for HotChocolate’s @authorize directive so authorization metadata is preserved (and de-duplicated) when composing multiple source schemas into a single execution schema.
Changes:
- Introduces an
AuthorizeDirectiveMergerand hooks it intoSourceSchemaMergerfor object types and output fields. - Adds canonical
@authorizedirective +ApplyPolicyenum definitions used to validate “definition matches canonical” before merging. - Adds comprehensive snapshot tests covering policy/roles/apply merging and de-duplication behavior.
Reviewed changes
Copilot reviewed 11 out of 12 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/HotChocolate/Fusion/test/Fusion.Composition.Tests/SourceSchemaMerger.AuthorizeDirective.Tests.cs | New snapshot tests covering @authorize directive merging scenarios. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownTypeNames.cs | Adds well-known type name for ApplyPolicy. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownDirectiveNames.cs | Adds well-known directive name for authorize. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownArgumentNames.cs | Adds well-known argument names apply, policy, and roles. |
| src/HotChocolate/Fusion/src/Fusion.Composition/SourceSchemaMerger.cs | Registers and applies the new authorize directive merger during type/field merges. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.resx | Adds localized error strings for invalid @authorize argument shapes/values. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.Designer.cs | Generated strongly-typed accessors for the new resource strings. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Directives/AuthorizeDirective.cs | Parses @authorize directive arguments into a normalized representation for merging. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Directives/ApplyPolicy.cs | Internal enum representing ApplyPolicy values for merging logic. |
| src/HotChocolate/Fusion/src/Fusion.Composition/DirectiveMergers/AuthorizeDirectiveMerger.cs | Implements merging + de-duplication rules for @authorize directives. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Definitions/AuthorizeMutableDirectiveDefinition.cs | Canonical mutable directive definition for @authorize used for definition matching. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Definitions/ApplyPolicyMutableEnumTypeDefinition.cs | Canonical mutable enum definition for ApplyPolicy. |
Files not reviewed (1)
- src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.Designer.cs: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9378 +/- ##
============================
============================
☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Summary of the changes (Less than 80 chars)
@authorizedirectives.