Module: Dscf::Core::Authorizable

Extended by:
ActiveSupport::Concern
Includes:
Pundit::Authorization
Included in:
ApplicationController, Common
Defined in:
app/controllers/concerns/dscf/core/authorizable.rb

Instance Method Summary collapse

Instance Method Details

#authorize(record, query = nil, policy_class: nil) ⇒ Object

Override authorize to fall back to ApplicationPolicy when no specific policy is defined. In Pundit 2.5, authorize delegates to Pundit::Context which bypasses the instance policy method.



28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/controllers/concerns/dscf/core/authorizable.rb', line 28

def authorize(record, query = nil, policy_class: nil)
  super
rescue ::Pundit::NotDefinedError
  fallback_policy = Dscf::Core::ApplicationPolicy.new(pundit_user, record)
  effective_query = query || "#{action_name}?"
  # Guard against undefined query methods — fail closed (deny) rather than raise NoMethodError
  unless fallback_policy.respond_to?(effective_query, true) && fallback_policy.public_send(effective_query)
    raise ::Pundit::NotAuthorizedError, policy: fallback_policy, query: effective_query, record: record
  end

  record
end

#authorize_action!Object



15
16
17
18
19
20
# File 'app/controllers/concerns/dscf/core/authorizable.rb', line 15

def authorize_action!
  policy_target = resolve_policy_target
  return skip_authorization unless policy_target

  authorize policy_target
end

#policy_scope(scope, policy_scope_class: nil) ⇒ Object

Override policy_scope to fall back to ApplicationPolicy::Scope when no specific scope is defined.



42
43
44
45
46
# File 'app/controllers/concerns/dscf/core/authorizable.rb', line 42

def policy_scope(scope, policy_scope_class: nil)
  super
rescue ::Pundit::NotDefinedError
  Dscf::Core::ApplicationPolicy::Scope.new(pundit_user, scope).resolve
end

#pundit_userObject



22
23
24
# File 'app/controllers/concerns/dscf/core/authorizable.rb', line 22

def pundit_user
  current_user
end