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できるような仕組みがあれば、より綺麗に掛けると思うのですが、まだそこまで踏み込めておりません。

4月 11, 2018Rails

Posted by poison