class GraphQR::Policies::PunditProvider
This is a wrapper around Pundit provided to keep all PolicyProviders with the same methods.
If you want to use the Pundit integration with our extensions you should pass:
“` {
policy_provider: GraphQR::Policies::PunditProvider.new(policy_context: pundit_user)
} “`
To the Schema context.
Attributes
policy_context[R]
Public Class Methods
new(policy_context:)
click to toggle source
# File lib/graphqr/policies/pundit_provider.rb, line 22 def initialize(policy_context:) @policy_context = policy_context end
Public Instance Methods
allowed?(action:, record:, policy_class: nil)
click to toggle source
# File lib/graphqr/policies/pundit_provider.rb, line 26 def allowed?(action:, record:, policy_class: nil) policy = policy_for(record: record, policy_class: policy_class) policy.apply(action) end
permitted_field?(record:, field_name:)
click to toggle source
# File lib/graphqr/policies/pundit_provider.rb, line 36 def permitted_field?(record:, field_name:) policy = policy_for(record: record) policy.permitted_fields.include?(field_name) end
Private Instance Methods
policy_class_for(record:)
click to toggle source
# File lib/graphqr/policies/pundit_provider.rb, line 49 def policy_class_for(record:) Pundit::PolicyFinder.new(record).policy! end
policy_for(record:, policy_class: nil)
click to toggle source
# File lib/graphqr/policies/pundit_provider.rb, line 44 def policy_for(record:, policy_class: nil) policy_class ||= policy_class_for(record: record) policy_class.new(policy_context, record) end