Je reçois un "Pundit :: PolicyScopingNotPerformedError" lors de l'appel d'une requête GET à la méthode show de ce contrôleur. Toute aide appréciée.Rails Pundit Autorisation non effectuée
Controller:
class DashboardsController < ApplicationController
before_action :authorize_dashboard_for_customer, only: :show
after_action :verify_authorized, except: :index
after_action :verify_policy_scoped, only: :show
expose(:dashboards) {
Customer.find(params[:customer_id]).dashboards
}
expose(:dashboard) {
Dashboard.find(params[:id])
}
expose(:customer) {
Customer.find(params[:customer_id])
}
def index
end
def show
end
private
def authorize_dashboard_for_customer
authorize dashboard, :show?
end
end
Voici la politique Pundit:
class DashboardPolicy < ApplicationPolicy
def index?
show?
end
def show?
customer = user.try(:customer)
return false if customer.blank?
@record.customers.present? && @record.customers.include?(customer) || user.role == 'admin'
end
end
J'ai lu d'autres messages à ce sujet, mais encore de ne pas voir ce que je fais mal ici. Je ne sais toujours pas ce que fait la résolution d'une portée de stratégie, mais dans ce cas, je peux voir à partir des instructions de débogage que la stratégie est en cours d'exécution, donc je ne suis pas sûr de la nature du problème.
Merci - cela aide certains. @Scott - vous dites _mais vous n'appelez rien pour la portée de votre action_ - est-ce que j'appellerais cette portée dans la méthode de la politique ou dans la méthode du contrôleur? – Andrew
@andrew Vous allez ajouter la classe de portée à votre classe de politique, puis l'appeler du contrôleur pour récupérer les enregistrements. – Scott