class GraphQL::Pundit::Instrumenters::Authorization::AuthorizationResolver

This does the actual Pundit authorization

Attributes

current_user[R]
old_resolver[R]
options[R]

Public Class Methods

new(current_user, old_resolver, options) click to toggle source
# File lib/graphql-pundit/instrumenters/authorization.rb, line 14
def initialize(current_user, old_resolver, options)
  @current_user = current_user
  @old_resolver = old_resolver
  @options = options
end

Public Instance Methods

call(root, arguments, context) click to toggle source
# File lib/graphql-pundit/instrumenters/authorization.rb, line 20
def call(root, arguments, context)
  raise ::Pundit::NotAuthorizedError unless authorize(root, arguments, context)

  old_resolver.call(root, arguments, context)
rescue ::Pundit::NotAuthorizedError
  raise GraphQL::ExecutionError, "You're not authorized to do this" if options[:raise]
end

Private Instance Methods

authorize(root, arguments, context) click to toggle source
# File lib/graphql-pundit/instrumenters/authorization.rb, line 30
def authorize(root, arguments, context)
  if options[:proc]
    options[:proc].call(root, arguments, context)
  else
    record = record(root, arguments, context)
    ::Pundit::PolicyFinder.new(policy(record)).policy!
      .new(context[current_user], record).public_send(query)
  end
end
policy(record) click to toggle source
# File lib/graphql-pundit/instrumenters/authorization.rb, line 44
def policy(record)
  options[:policy] || record
end
query() click to toggle source
# File lib/graphql-pundit/instrumenters/authorization.rb, line 40
def query
  @query ||= "#{options[:query]}?"
end
record(root, arguments, context) click to toggle source
# File lib/graphql-pundit/instrumenters/authorization.rb, line 48
def record(root, arguments, context)
  if options[:record].respond_to?(:call)
    options[:record].call(root, arguments, context)
  else
    options[:record] || root
  end
end