module GraphQL::Schema::Member::HasArguments::ArgumentObjectLoader
def authorize_application_object(argument, id, context, loaded_application_object)
def authorize_application_object(argument, id, context, loaded_application_object) context.schema.after_lazy(loaded_application_object) do |application_object| if application_object.nil? err = GraphQL::LoadApplicationObjectFailedError.new(argument: argument, id: id, object: application_object) load_application_object_failed(err) end # Double-check that the located object is actually of this type # (Don't want to allow arbitrary access to objects this way) resolved_application_object_type = context.schema.resolve_type(argument.loads, application_object, context) context.schema.after_lazy(resolved_application_object_type) do |application_object_type| possible_object_types = context.warden.possible_types(argument.loads) if !possible_object_types.include?(application_object_type) err = GraphQL::LoadApplicationObjectFailedError.new(argument: argument, id: id, object: application_object) load_application_object_failed(err) else # This object was loaded successfully # and resolved to the right type, # now apply the `.authorized?` class method if there is one context.schema.after_lazy(application_object_type.authorized?(application_object, context)) do |authed| if authed application_object else err = GraphQL::UnauthorizedError.new( object: application_object, type: application_object_type, context: context, ) if self.respond_to?(:unauthorized_object) err.set_backtrace(caller) unauthorized_object(err) else raise err end end end end end end end
def load_and_authorize_application_object(argument, id, context)
def load_and_authorize_application_object(argument, id, context) loaded_application_object = load_application_object(argument, id, context) authorize_application_object(argument, id, context, loaded_application_object) end
def load_application_object(argument, id, context)
def load_application_object(argument, id, context) # See if any object can be found for this ID if id.nil? return nil end object_from_id(argument.loads, id, context) end
def load_application_object_failed(err)
def load_application_object_failed(err) raise err end
def object_from_id(type, id, context)
-
context
(GraphQL::Query::Context
) -- the current context -
id
(String
) -- A client-provided to look up -
type
(Class, Module
) -- A GraphQL type definition
def object_from_id(type, id, context) context.schema.object_from_id(id, context) end