이 컨트롤러의 show 메소드에 GET 요청을 호출 할 때 "Pundit :: PolicyScopingNotPerformedError"가 표시됩니다. 어떤 도움을 주셔서 감사합니다.Rails Pundit 인증이 수행되지 않았습니다.
컨트롤러 :
여기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
는 학자 정책 : 이것에 대해 다른 게시물을 읽을 수 있지만 여전히 내가 잘못 여기서 뭘하는지 표시되지 않는 한
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
. 나는 여전히 정책 범위를 해결하는 일에 희미하지만,이 경우에는 정책을 위반한다는 디버그 문을 볼 수 있으므로 어떤 문제인지 잘 모르겠습니다.
감사합니다. 일부 도움이됩니다. @Scott - 당신은 action_scope의 범위에 대해 아무것도 호출하지 않는다고 말하고 싶습니다 - 나는 정책 메서드 나 컨트롤러 메서드에서이 범위를 호출할까요? – Andrew
@andrew 범위 클래스를 정책 클래스에 추가 한 다음 컨트롤러에서 호출하여 레코드를 검색합니다. – Scott