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