【问题标题】:Skip authorize at a specific point inside a Rails method在 Rails 方法中的特定点跳过授权
【发布时间】:2018-05-03 12:05:25
【问题描述】:

我有一个 if else 语句,我在其中检查是否以前选择过某些公司。如果列表为空,我想传递 @companies = "Empty" 以便我可以使用它来呈现不同的视图。然而,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

【问题讨论】:

  • 我建议您设置@companies = [],这样您就可以始终依赖在您的视图中拥有一个数组。在视图中,我会检查if @companies.empty? 以查看其中是否有任何内容。我在 if 条件的第一个分支中没有看到授权步骤
  • 是的,如果我取消注释 authorize @companies 我会得到以下信息:Pundit::AuthorizationNotPerformedError - UserselectionsController:
  • 我认为有一个skip_authorization 助手,见github.com/varvet/pundit
  • 是的,就是这样!!!!谢谢!!!

标签: ruby-on-rails pundit


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多