我有一个自定义路由设置,在 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
以我的能力.rb
can :see_location, MenuItem do |location| location && user.location_ids.include?(location.id) end
出于某种原因,这对我不起作用。我可能做错了什么?如果你们能帮助我,我将不胜感激!
谢谢。