专家返回错误的值

时间:2016-12-01 15:42:09

标签: ruby-on-rails ruby pundit

我有这个申请政策:

class ApplicationPolicy
  attr_reader :user, :record

  def initialize(user, record)
    @user = user
    @record = record
  end

  ...    

  def create?
    user && user.admin?
  end

  def update?
    create?
  end

  def edit?
    create?
  end
end

PostPolicy看起来像这样:

class PostPolicy < ApplicationPolicy
  ...
  def create?
    super || (user && user.in_committee?)
  end
  def update?
    super || (user && user.committees.include?(record.group))
  end
  def edit?
    update?
  end
  ...
end

现在,当非管理员即user的用户返回true(存在)且user.admin?返回false(不是管理员)时,尝试编辑或更新帖子,我们检查应用程序策略。我们现在希望当用户尝试编辑帖子时,由于update?返回super.update?super.update?返回super.create?,应该会返回false,因此会被拒绝访问。 ((user && user.committees.include?(record.group))返回false)

事实并非如此。如果我们打印 如果我们在user && user.admin?内打印出create?,则打印出true create?在ApplicationPolicy的update?内打印出false。我试着在没有权威的情况下进行快速检查,但是它起到了expected

的作用

我现在只需将update?的正文更改为:

即可解决此问题
def update?
  user && user.admin?
end

在ApplicationPolicy中解决了我的问题。所以我想我很好奇为什么会这样,如果有人遇到同样的问题。

0 个答案:

没有答案