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

时间:2013-03-14 11:06:36

标签: ruby-on-rails ruby-on-rails-3 authorization cancan rolify

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

我怎样才能实现这一切?

1 个答案:

答案 0 :(得分:1)

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

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

同样适用于编辑和更新操作。在这种情况下不需要康康。