如何限制当前登录的用户只能看到属于他们的产品?

如果用户使用特定角色( 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 )应该能够看到所有:buyer所有产品(管理员/等)。 买方将无法查看某些产品的价格和其他一些属性等。

我怎样才能实现这一切?

在控制器中,您只能找到属于该用户的产品。

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

同样适用于编辑和更新操作。 在这种情况下,Cancan不是必需的。