【发布时间】:2013-05-06 16:17:47
【问题描述】:
我有一个自定义路由设置,在 url 中有一个 location_id(见下文)
resources :menu_items, :path => "/location_menu/:location_id"
所以当我点击 /location_menu/1 时,它会显示 location_1 的菜单,/location_menu/2 会显示 location_2 的菜单,等等。
每个用户都关联到多个位置 (has_many :locations)
我正在尝试使用 cancan 来限制用户查看某些 menu_item URL。
例如: 用户 1 与位置 1 和 2 相关联。因此他们只能查看页面 /location_menu/1 和 /location_menu/2。但他们将无法查看/location_menu/3。
我在我的控制器中创建了一个自定义方法作为 before_filter:
before_filter :location_check
...
def location_check
@location = Location.find(params[:location_id])
authorize! :see_location, @location
end
在我的ability.rb中
can :see_location, MenuItem do |location| location && user.location_ids.include?(location.id) end
由于某种原因,这对我不起作用。我可能做错了什么?如果你们能帮助我,我将不胜感激!
谢谢。
【问题讨论】:
-
user和location之间的关联是否为has_many_through
标签: ruby-on-rails ruby rubygems gem cancan