Rails 未执行 Pundit 授权
Rails Pundit Authorization not performed
我在向该控制器的显示方法调用 GET 请求时收到 "Pundit::PolicyScopingNotPerformedError"。任何帮助表示赞赏。
控制器:
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
这是 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
我已经阅读了有关此的其他帖子,但仍然没有看到我在这里做错了什么。我仍然不清楚解决策略范围在做什么,但在这种情况下,我可以从调试语句中看出它符合策略,所以我不确定问题出在哪里。
在您的控制器中,您正在检查以确保使用 after_action :verify_policy_scoped, only: :show
调用策略范围,但您没有在操作中为该范围调用任何内容。
您可以使用 Scopes 根据登录用户权限限制结果。例如,索引屏幕上的管理员用户可能会看到所有结果,但非管理员用户可能只能看到某些记录。国际海事组织你不应该在节目中需要范围所以你应该能够删除 verify_policy_scoped
.
我在向该控制器的显示方法调用 GET 请求时收到 "Pundit::PolicyScopingNotPerformedError"。任何帮助表示赞赏。
控制器:
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
这是 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
我已经阅读了有关此的其他帖子,但仍然没有看到我在这里做错了什么。我仍然不清楚解决策略范围在做什么,但在这种情况下,我可以从调试语句中看出它符合策略,所以我不确定问题出在哪里。
在您的控制器中,您正在检查以确保使用 after_action :verify_policy_scoped, only: :show
调用策略范围,但您没有在操作中为该范围调用任何内容。
您可以使用 Scopes 根据登录用户权限限制结果。例如,索引屏幕上的管理员用户可能会看到所有结果,但非管理员用户可能只能看到某些记录。国际海事组织你不应该在节目中需要范围所以你应该能够删除 verify_policy_scoped
.