我正在使用带有继承资源的cancan,我遇到了一个奇怪的问题(可能是bug?),我为用户定义了一个编辑权限的权限,但突然他们被授权访问/ edit动作尽管有能力返回假。所以这就是我正在经历的行为。
class VenuesController < ApplicationController
inherit_resources
authorize_resource
end
如果没有定义能力,我的非管理员用户将从/ venues / 1 / edit重定向到主页。但是,一旦我定义了:更新能力,我就不会重定向该能力是返回true还是false。这是我想要定义的能力:
can :update, Venue do |venue|
venue.admin_ids.map{|a| a.to_s}.include? user.id.to_s
end
这会返回正确的值,正如我在测试中看到的那样,以及在我的视图中进行的健全性检查:
= can? :update, @venue
#returns false
所以,如果我在编辑操作中并且我的视图显示“我无法更新”,那么不应该可以从此页面重定向我吗?作为双重理智检查,我试过
can :update, Venue do |venue|
false
end
并且仍然没有运气......我发现很奇怪,没有任何能力定义,我被重定向,但是当我定义一个返回false的能力时,我没有重定向,尽管视图层适当地告诉我我无法编辑。有任何想法吗?这是一个错误吗?我做错了吗?
此外,我不仅可以看到编辑操作,而且实际上会向资源发出请求并保存资源。