Class: ActiveAdmin::GraphQL::SchemaField

Inherits:
GraphQL::Schema::Field
  • Object
show all
Defined in:
lib/active_admin/graphql/schema_field.rb

Overview

Subclass of GraphQL::Schema::Field for namespace Query / Mutation fields.

The visibility: keyword accepts an optional Hash of metadata forwarded to graphql_schema_visible (second argument) when GraphQL::Schema::Visibility is enabled. That hook runs from #visible?; it does not replace graphql-ruby’s visibility system—it composes with super like any custom Field class.

Instance Method Summary collapse

Constructor Details

#initialize(visibility: nil, authorize: nil, authorize_action: nil, **kwargs, &block) ⇒ SchemaField

Returns a new instance of SchemaField.



12
13
14
15
16
17
# File 'lib/active_admin/graphql/schema_field.rb', line 12

def initialize(visibility: nil, authorize: nil, authorize_action: nil, **kwargs, &block)
  @visibility = visibility
  @authorize = authorize
  @authorize_action = authorize_action
  super(**kwargs, &block)
end

Instance Method Details

#authorized?(object, args, ctx) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/active_admin/graphql/schema_field.rb', line 30

def authorized?(object, args, ctx)
  return false unless super

  owner = self.owner
  aa_resource = owner.respond_to?(:activeadmin_graphql_resource) ? owner.activeadmin_graphql_resource : nil
  return true unless aa_resource

  enabled = if @authorize.nil?
    ctx[:namespace]&.graphql_custom_field_authorization_default != false
  else
    @authorize
  end
  return true unless enabled

  action = @authorize_action || ActiveAdmin::Authorization::READ
  !!ctx[:auth]&.authorized?(aa_resource, action, object)
end

#visible?(ctx) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
23
24
25
26
27
28
# File 'lib/active_admin/graphql/schema_field.rb', line 19

def visible?(ctx)
  return false unless super

  return true unless @visibility

  hook = ctx[:namespace]&.graphql_schema_visible
  return true if hook.nil?

  !!hook.call(ctx, @visibility)
end