CanCan双嵌套资源许可问题

时间:2011-06-12 20:59:56

标签: ruby-on-rails cancan

我在定义两次嵌套资源的权限时遇到了一些问题。我有用户>公司>订单...

我的用户通过协议拥有许多公司。

每家公司都有很多订单,每份订单都属于一家公司。

我的abilities.rb文件包含以下内容:

elsif user.role? :customer_admin
      can [:read, :update], User, :id => user.id
      can [:read, :update], Company, :id => user.id 
      can :read, Company, :users => { :id => user.id }
      can :read, Order, :user => { :id => user.id }
 end

在我的订单控制器中,我有这个:

 load_and_authorize_resource :company
  load_and_authorize_resource :order, :through => :company

问题是我似乎无法将该订单视为customer_admin

希望你能帮忙,再次感谢。

----编辑----

user.rb

 has_and_belongs_to_many :roles
  has_many :agreements
  has_many :companies, :through => :agreements

company.rb

  has_many :agreements
  has_many :users, :through => :agreements
  has_many :orders
  accepts_nested_attributes_for :orders

order.rb

  belongs_to :company
  has_many :comments
  has_many :tasks
  has_many :requirements
  has_many :services, :through => :requirements
  has_many :servicelevelagreements
  has_many :slas, :through => :servicelevelagreements

agreement.rb

  belongs_to :user
  belongs_to :company

希望有一点帮助!!

1 个答案:

答案 0 :(得分:3)

订单中是否有user_id,用于定义管理员用户? 您似乎想在has_many :through关联中使用它。如果是这种情况,那么我建议通过这样定义来尝试访问:

can :read, Order, :company => { :user_id => user.id }

由于cancan支持嵌套关联。

<强>更新

我的设置假定您的模型如下:

#order.rb

belongs_to :company

#company.rb

belongs_to :user
has_many :orders

您的公司应该包含一个名为user_id的字段,该字段是指定用户的ID。

有关更多信息,请参阅维基。 https://github.com/ryanb/cancan/wiki/Nested-Resources

更新2

问题在于您的company has_many :users, :through=>:agreements

这涉及以下定义:

can :read, Order, :company => { :users => { :id => user.id } }