unauthorized_objectについて
GraphQL-Rubyにはresolveしたオブジェクトへの参照権限があるのかのチェック、ない場合の処理を実装することができます
以下のようにType側に実装し、
class Types::SomeType < Types::BaseObject
...
def self.authorized?(object, context)
super && object.published?
end
end
Schemaに定義したunauthorized_objectでエラーハンドリングが行なえます
class Schema < GraphQL::Schema
...
def self.unauthorized_object(error)
# raise or return some object
end
end
Type側でエラーハンドリングをしたい
できればunauthorizedの処理はType側にまとめたいところです
unauthorized_object
に渡るerror
はtype
を持っているので
以下のように実装することでType側に処理を移すことができます。
# Schema
def self.unauthorized_object(error)
if error.type.respond_to? :unauthorized_object
error.type.unauthorized_object(error)
end
end
# SomeType
def self.unauthorized_object(error)
# エラーハンドリング
end
データをマスクする
error.object
でresolveしたオブジェクトを取得することができるので公開したくないフィールドを空文字やnilに返ることができます
def self.unauthorized_object(error)
object = error.object
object.some_hidden_content = nil
object
end