我正在使用 Devise 和 CanCan 开发 Rails 3.2 应用程序。
我的用户模型是用户,我想将对产品资源的访问限制为用户创建的资源。相关代码片段:
应用程序/模型/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
if user
can :manage, Product, user_id: user.id
end
end
end
应用程序/控制器/products_controller.rb
class ProductsController < ApplicationController
load_and_authorize_resource
..
end
配置/路由.rb
...
devise_for :products
resources :products do
resources :sizes
end
...
一切都按预期工作:用户无法查看、编辑等...不是他们创建的产品。但问题是,如果用户在 /products 访问产品索引,那么所有产品都是可见的。
如何过滤索引页面中的相关产品?
我四处搜索,并尝试authorize! :index, Ability
在索引操作中与 一起尝试can :index, Product, user_id: user.id
,但随后用户根本无法访问索引页面。
任何帮助表示赞赏。