可以?(:update)返回false,但不能使用inherited_resources gem限制对资源的编辑/更新

时间:2013-01-28 17:00:01

标签: ruby-on-rails-3 cancan inherited-resources

我正在使用带有继承资源的cancan,我遇到了一个奇怪的问题(可能是bug?),我为用户定义了一个编辑权限的权限,但突然他们被授权访问/ edit动作尽管有能力返回假。所以这就是我正在经历的行为。

class VenuesController < ApplicationController
  inherit_resources
  authorize_resource
end

如果没有定义能力,我的非管理员用户将从/ venues / 1 / edit重定向到主页。但是,一旦我定义了:更新能力,我就不会重定向该能力是返回true还是false。这是我想要定义的能力:

ability.rb

can :update, Venue do |venue|
  venue.admin_ids.map{|a| a.to_s}.include? user.id.to_s
end

这会返回正确的值,正如我在测试中看到的那样,以及在我的视图中进行的健全性检查:

地点/ edit.html.haml

= can? :update, @venue
#returns false

所以,如果我在编辑操作中并且我的视图显示“我无法更新”,那么不应该可以从此页面重定向我吗?作为双重理智检查,我试过

can :update, Venue do |venue|
  false
end

并且仍然没有运气......我发现很奇怪,没有任何能力定义,我被重定向,但是当我定义一个返回false的能力时,我没有重定向,尽管视图层适当地告诉我我无法编辑。有任何想法吗?这是一个错误吗?我做错了吗?

此外,我不仅可以看到编辑操作,而且实际上会向资源发出请求并保存资源。

0 个答案:

没有答案