1
當調用此控制器的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
我讀過關於這個其他職位,但仍然沒有看到我在做什麼錯在這裏。我仍然不清楚解決策略範圍在做什麼,但在這種情況下,我可以從調試聲明中看到它正在實施策略,所以我不確定問題是什麼。
謝謝 - 這有助於一些。 @斯科特 - 你說_但你沒有在行動中爲範圍調用任何東西_我會在策略方法還是在控制器方法中調用這個範圍? – Andrew
@andrew您將範圍類添加到您的策略類,然後從控制器調用它以檢索記錄。 – Scott