CanCan正在限制发现的数据

时间:2011-06-11 12:16:42

标签: ruby-on-rails-3 devise cancan

我正在使用Cancan,Devise,Rails 3进行订购。

每个用户通过协议拥有许多公司。每家公司还通过协议拥有许多用户。

在我的能力模型中,我有以下内容:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user   
    if user.role? :super
      can :manage, :all
    elsif user.role? :admin
      can :manage, [User, Company, Order]
    elsif user.role? :tech
      can :manage, [User, Company, Tech]  
    elsif user.role? :customer_admin
      can [:read, :update], User, :id => user.id
      can [:read, :update], Company, :id => user.id  
      can [:read ], Order, :id => user.id            
    end
  end
end

当customer_admin登录时,我一直在尝试向他们展示他们所关联的公司。在公司视图中,我可以很好地看到用户列表。

在我的公司控制器(索引)中,我尝试过这样做:

 @usercompanies = Company.where(['user_id = ?', current_user.id ])

然而,这列出了错误的公司?!

我确定这是一个愚蠢的新手错误,但感谢你的帮助。如果您还有其他需要,请告诉我。

1 个答案:

答案 0 :(得分:1)

你可以很快地添加cancan的限制,这也是我第一次设置它时的困惑。设置此文档的文档是here。作为参考,您希望在控制器中使索引操作看起来像这样:

@usercompanies = Company.accessible_by(current_ability)

然而,在最新版本的gem中,这应该在索引操作上自动完成。我认为你的abilities.rb中有一个错误,因为当你有一个记录并且你与一个用户相关时,它通常有一个名为user_id的列。您可能希望像这样使用它:

can [:read ], Order, :user_id => user.id

由于属性id通常用作记录的唯一ID,而不是association的ID。