我在定义两次嵌套资源的权限时遇到了一些问题。我有用户>公司>订单...
我的用户通过协议拥有许多公司。
每家公司都有很多订单,每份订单都属于一家公司。
我的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
希望有一点帮助!!
答案 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 } }