Sha256: ade9a8a2526e57b2e75da9a75dbc65d792406eae3126fef7834ede37db8c0fb8

Contents?: true

Size: 1008 Bytes

Versions: 3

Compression:

Stored size: 1008 Bytes

Contents

# frozen_string_literal: true

module GraphqlAuthorize
  module FieldResolveStep
    # rubocop:disable Metrics/ParameterLists
    def call(_parent_type, parent_object, field_definition, field_args, context, _next = nil)
      if authorized?(field_definition, parent_object, field_args, context)
        super
      else
        GraphQL::ExecutionError.new("Access to the field '#{field_definition.name}' is denied!")
      end
    rescue StandardError => err
      GraphQL::ExecutionError.new(err.inspect)
    end
    # rubocop:enable Metrics/ParameterLists

    private

    def authorized?(field_definition, object, args, context)
      return true if field_definition.authorize.nil?

      if field_definition.authorize.is_a?(Proc)
        return field_definition.authorize.call(object, args, context)
      end

      return false if auth_adapter.nil?

      auth_adapter.new(field_definition, context).authorize
    end

    def auth_adapter
      GraphqlAuthorize.config.auth_adapter
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
graphql_authorize-0.2.0 lib/graphql_authorize/ext/field_resolve_step.rb
graphql_authorize-0.1.1 lib/graphql_authorize/ext/field_resolve_step.rb
graphql_authorize-0.1.0 lib/graphql_authorize/ext/field_resolve_step.rb