跳过Rails方法中特定点的授权

时间:2018-05-03 12:05:25

标签: ruby-on-rails pundit

我有一个if else声明,其中我检查某些公司之前是否被选中。如果列表为空,我想通过@companies ="清空"所以我可以用它来渲染不同的视图。然而,Pundit需要获得一家公司。

有没有办法在方法中的特定点跳过授权?在这种情况下,请在评论#Skip authorize @companies here?

上跳过它
  policy_scope(Company)
    if params[:query].present?
      if (Company.search_by_name_and_category(params[:query].capitalize) - @selected_companies).empty?
        @companies = "Empty"
        # Skip authorize @companies here
      else
        @companies = (Company.search_by_name_and_category(params[:query].capitalize) - @selected_companies)
        @companies.each {|company| authorize company }
      end

    else
      @companies = Company.all - @selected_companies
      @companies.each {|company| authorize company }
    end

1 个答案:

答案 0 :(得分:2)

除了有条件地跳过授权之外,我会对代码进行以下更改以减少查询和代码行:

policy_scope(Company)

@companies = params[:query].present? ?
               Company.search_by_name_and_category(params[:query].capitalize) :
               Company.all
@companies -= @selected_companies

if @companies.blank?
  skip_authorization
else
  @companies.each { |company| authorize company }
end