2013-03-14 64 views
0

如果用戶使用特定角色登錄 - vendor - 他們應該只能看到他們在其商店中創建的項目。他們不應該能夠看到其他供應商的產品。如何限制當前登錄的用戶只能看到屬於他們的產品?

所以我想在我的授權(使用Devise,CanCan,Rolify)做到這一點。

我嘗試這樣做:

user ||= User.new # guest user (not logged in) 
if user.has_role? :vendor 
    can :dashboard 
    can :manage, [Product, Vendor], :vendor_id => user.id 
    can :view, [Product], :vendor_id => user.id 
end 

但是....還沒有與多少運氣......我缺少什麼?

編輯1

我知道我可以限制產品,如控制器:

@product = current_user.products 

但是,這不是我所期待的。在這種情況下,供應商(即角色爲:vendor的用戶)應該只能看到他們添加到商店的產品,但他們不應該看到其他供應商添加的產品。但是,買方(即角色:buyer的用戶)應該能夠看到所有買方的所有產品(如管理員/等)。買家將無法看到價格以及某些產品的某些其他屬性等。

我該如何實現所有這一切?

+0

我認爲你要找的是'can:read'而不是'can:view' – 2013-03-14 12:58:27

回答

1

在控制器中,您只能找到屬於該用戶的產品。

def show 
    @product = @user.products.find(params[:id]) 
    ... 

同樣適用於編輯和更新操作。在這種情況下康康不是必需的。

+0

我知道......但是有些部分是他們不應該訪問的 - 例如, 1供應商應該無法看到其他供應商的產品目錄。即使買方也應該能夠看到所有供應商的所有產品。如果我將這個邏輯放在我的控制器中,我將不得不爲每個動作和每個角色編寫定製邏輯......對吧?必須有另一種方式來做到這一點。 – marcamillion 2013-03-14 12:38:07

相關問題