Rails 4 - 限制对共享对象的访问的最佳实践是什么

时间:2013-08-24 17:19:50

标签: permissions ruby-on-rails-4 cancan

用户has_many合约作为买方 用户has_many合同作为卖家

我知道我可以使用CanCan将用户限制为他们拥有的东西。但在这种情况下,我有一份合同,既有买方也有买方。卖家。我希望用户能够查看/阅读他们是买方或卖方的所有合同。

我尝试设置一个Scope并将其与CanCan一起使用,但这似乎不起作用。

我设置我的能力......

can :read, Contract.parties(user.id)

我的范围定义为......

scope :parties, lambda { |user_id| where("seller_id = ? OR buyer_id = ?", user_id, user_id) }

我也试过以不同的方式设置能力......

can :read, Contract, buyer_id: user.id
can :read, Contract, seller_id: user.id

但上述情况似乎发生冲突并引发错误

1 个答案:

答案 0 :(得分:0)

尝试使用具有CanCan功能的块:

can :read, Contract do |c|
  (c.buyer_id == user.id) || (c.seller_id == user.id)
end