123456789101112131415161718192021222324252627282930 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- module Gql::Fields
- # Represents fields that can be restricted by by Pundit 'FieldScope' results.
- class ScopedField < BaseField
- def initialize(*args, **kwargs, &)
- # Schema verification check: require nullability for scoped fields.
- if !kwargs[:null].nil? && !kwargs[:null]
- raise "The scoped field #{kwargs[:name]} must be nullable."
- end
- super
- end
- # If a field is not authorized, just return 'nil' rather than throwing a GraphQL error.
- def resolve(object, args, context)
- field_authorized?(object) ? super : nil
- end
- private
- def field_authorized?(object)
- pundit_result = object.cached_pundit_authorize
- # Check if the pundit result is a 'FieldScope' object.
- pundit_result.respond_to?(:field_authorized?) ? pundit_result.field_authorized?(original_name) : !!pundit_result
- end
- end
- end
|