graphql-rubyで認証の有無によりSchemaを分ける
はじめに
graphql-rubyは優れたgemです。誰でも簡単にgraphqlなAPIを作成することができます。Railsとの親和性も非常に高いと思います。
しかしながら一点、問題があります。それは認証周りの機能は有償であることです。
仕事で利用する分にはなんら問題ありません。むしろ喜んで支払いたいと思います。ただ、趣味で利用するには些か敷居の高い料金設定($900/年)でございます。
やったこと
そこで私は以下の通り、schemaを二つに分けて利用しております。
AuthorizationヘッダーにJWTトークンが乗ってきた場合のみ、PrivateなSchemaが利用されることとなります。リソースごとの細かなアクセス制限については、query/mutationの定義中で、current_userを利用して、Punditをコールすることにより対応しております。
欠点はQuery/Mutationの記述が些か冗長となる点でしょうか。GraphQL::ObjectType.defineによる定義をmixinできるような仕組みがあれば、より綺麗に掛けると思うのですが、まだそこまで踏み込めておりません。