Drupal menu's ontsluiten met Gatsby en GraphQL

Bij het bouwen van de headless site wilde ik ook het menu ontsluiten. Standaard komt van JSON:API een allMenuMenu en menuMenu query wat toegang geeft de menu's maar niet tot de menu-items die er in zitten. Hiervoor hebben menuLinkContentMenuLinkContent nodig, maar die is niet beschikbaar voor anonieme gebruikers, tenzij je die het recht "Administer menus and menu items" geeft (wat je NIET wilt uiteraard).

Hier is al een issue voor binnen de Drupal core maar dat issue is al 3 jaar oud en heeft behoorlijk wat voeten in de aarde.

Er zijn tot zover 2 oplossingen:

1. GraphQL module

De GraphQL module heeft een menuByName query die toegang geeft tot het menu en haar items. Echter is GraphQL wel moeilijker te configureren dan JSON:API door het gebrek aan documentatie, maar het endpoint geeft wel meer queries die je kunt toepassen (en betere ondersteuning voor meertaligheid).

2. Gatsby rol

Ik heb voor een iets makkelijkere oplossing gekozen. Ik heb een rol & account gemaakt wat net iets meer rechten heeft dan een gewone bezoeker. Middels key authentication wordt de gebruiker ingelogd als Gatbsy zijn build draait en heeft zo toegang tot het menu en de onderliggende items.

back_blog