gitlab-org--gitlab-foss/app/graphql/types/base_object.rb

51 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module Types
class BaseObject < GraphQL::Schema::Object
prepend Gitlab::Graphql::Present
prepend Gitlab::Graphql::ExposePermissions
prepend Gitlab::Graphql::MarkdownField
field_class Types::BaseField
edge_type_class Types::BaseEdge
def self.authorize(*args)
raise 'Cannot redefine authorize' if @authorize_args && args.any?
@authorize_args = args.freeze if args.any?
@authorize_args || (superclass.respond_to?(:authorize) ? superclass.authorize : nil)
end
def self.accepts(*types)
@accepts ||= []
@accepts += types
@accepts
end
# All graphql fields exposing an id, should expose a global id.
def id
GitlabSchema.id_from_object(object)
end
def self.authorization
@authorization ||= ::Gitlab::Graphql::Authorize::ObjectAuthorization.new(authorize)
end
def self.authorized?(object, context)
authorization.ok?(object, context[:current_user])
end
def current_user
context[:current_user]
end
def self.assignable?(object)
assignable = accepts
return true if assignable.blank?
assignable.any? { |cls| object.is_a?(cls) }
end
end
end