class GraphQL::Guard
Constants
- ANY_FIELD_NAME
- DEFAULT_NOT_AUTHORIZED
- MASKING_FILTER
- NotAuthorizedError
- VERSION
Attributes
policy_object[R]
Public Class Methods
new(policy_object: nil, not_authorized: DEFAULT_NOT_AUTHORIZED)
click to toggle source
# File lib/graphql/guard.rb, line 23 def initialize(policy_object: nil, not_authorized: DEFAULT_NOT_AUTHORIZED) @policy_object = policy_object @not_authorized = not_authorized end
Private Class Methods
default_filter()
click to toggle source
# File lib/graphql/guard.rb, line 59 def self.default_filter GraphQL::Filter.new(except: default_mask).merge(only: MASKING_FILTER) end
Public Instance Methods
find_guard_proc(type, field)
click to toggle source
# File lib/graphql/guard.rb, line 46 def find_guard_proc(type, field) return unless type.respond_to?(:type_class) inline_guard(field) || policy_object_guard(type.type_class, field.name.to_sym) || inline_guard(type) || policy_object_guard(type.type_class, ANY_FIELD_NAME) end
trace(event, trace_data) { || ... }
click to toggle source
# File lib/graphql/guard.rb, line 38 def trace(event, trace_data) if event == 'execute_field' ensure_guarded(trace_data) { yield } else yield end end
use(schema_definition)
click to toggle source
# File lib/graphql/guard.rb, line 28 def use(schema_definition) if schema_definition.interpreter? schema_definition.tracer(self) else raise "Please use the graphql gem version >= 1.10 with GraphQL::Execution::Interpreter" end add_schema_masking!(schema_definition) end
Private Instance Methods
add_schema_masking!(schema_definition)
click to toggle source
# File lib/graphql/guard.rb, line 57 def add_schema_masking!(schema_definition) schema_definition.class_eval do def self.default_filter GraphQL::Filter.new(except: default_mask).merge(only: MASKING_FILTER) end end end
args(trace_data)
click to toggle source
# File lib/graphql/guard.rb, line 77 def args(trace_data) if trace_data[:arguments].key?(:input) && !trace_data[:arguments][:input].is_a?(Hash) return trace_data[:arguments][:input] # Relay mutation input end trace_data[:arguments] end
ensure_guarded(trace_data) { || ... }
click to toggle source
# File lib/graphql/guard.rb, line 65 def ensure_guarded(trace_data) field = trace_data[:field] guard_proc = find_guard_proc(field.owner, field) return yield unless guard_proc if guard_proc.call(trace_data[:object], args(trace_data), trace_data[:query].context) yield else not_authorized.call(field.owner.graphql_definition, field.name.to_sym) end end
inline_guard(type_or_field)
click to toggle source
# File lib/graphql/guard.rb, line 89 def inline_guard(type_or_field) type_or_field.graphql_definition.metadata[:guard] end
policy_object_guard(type, field_name)
click to toggle source
# File lib/graphql/guard.rb, line 85 def policy_object_guard(type, field_name) @policy_object && @policy_object.guard(type, field_name) end