2013-05-09 56 views
2

我正在使用Devise和CanCan開發Rails 3.2應用程序。CanCan無法在索引中篩選@products

我的用戶模型是用戶,我想限制對用戶創建的產品資源的訪問。相關的代碼片段:

應用程序/模型/ 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 

的config/routes.rb中

... 
devise_for :products 

resources :products do 
    resources :sizes 
end 
... 

一切正如預期的那樣工作:用戶不能看到,編輯等等,這些產品不是由他們創建的。但問題是,如果用戶訪問產品索引/ 所有產品是可見的。

我該怎麼做才能過濾索引頁中的相關產品?

我使用谷歌搜索,並試圖authorize! :index, Ability在索引行動與can :index, Product, user_id: user.id一起,但然後用戶根本無法在索引頁訪問。

任何幫助表示讚賞。

回答

2

這不是一個真正的授權問題。相反,您應該在您的產品控制器的索引操作中限定您的查詢範圍。例如,像這樣:

class ProductsController < ApplicationController 
    def index 
    @products = current_user.products 
    end 
end 
+0

當然,你是非常正確的。這是深夜,在這裏。非常感謝。 – Galen 2013-05-09 21:25:17

1

Rails中4我使用了這種方式:

class ProductsController < ApplicationController 
    def index 
    Product.all 
    end 
end 

它會根據你的康康舞能力過濾所有產品。在你的情況user_id: user.id將導致一個查詢如SELECT "products".* FROM "products" WHERE "products"."user_id" =