我有这个申请政策:
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中解决了我的问题。所以我想我很好奇为什么会这样,如果有人遇到同样的问题。