Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails CanCan双嵌套资源权限问题_Ruby On Rails_Cancan - Fatal编程技术网

Ruby on rails CanCan双嵌套资源权限问题

Ruby on rails CanCan双嵌套资源权限问题,ruby-on-rails,cancan,Ruby On Rails,Cancan,我在定义两次嵌套资源的权限时遇到一些问题。我有用户>公司>订单 我的用户通过协议拥有许多公司 每个公司都有许多订单,每个订单都属于一个公司 My Ababilities.rb文件包含以下内容: elsif user.role? :customer_admin can [:read, :update], User, :id => user.id can [:read, :update], Company, :id => user.id can :r

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

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

每个公司都有许多订单,每个订单都属于一个公司

My Ababilities.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
问题是,我似乎无法将订单视为客户\管理员

希望你能帮忙,再次谢谢

----编辑----

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
协议.rb

  belongs_to :user
  belongs_to :company

希望这有点帮助

订单中是否有定义管理员用户的
user\u id
? 似乎您希望在
有许多:通过
关联中使用它。如果是这样的话,我建议尝试通过如下定义来访问:

can :read, Order, :company => { :user_id => user.id }
因为
cancan
支持嵌套关联

更新

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

#order.rb

belongs_to :company

#company.rb

belongs_to :user
has_many :orders
您的公司应该包含一个名为
user\u id
的字段,该字段是指定用户的id

有关更多信息,请参阅wiki

更新2

问题是你的
公司
有很多:用户,:通过=>:agreements

这涉及以下定义:

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

订单中是否有定义管理员用户的
user\u id
? 似乎您希望在
有许多:通过
关联中使用它。如果是这样的话,我建议尝试通过如下定义来访问:

can :read, Order, :company => { :user_id => user.id }
因为
cancan
支持嵌套关联

更新

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

#order.rb

belongs_to :company

#company.rb

belongs_to :user
has_many :orders
您的公司应该包含一个名为
user\u id
的字段,该字段是指定用户的id

有关更多信息,请参阅wiki

更新2

问题是你的
公司
有很多:用户,:通过=>:agreements

这涉及以下定义:

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

谢谢你的帮助。不,订单没有用户id,因为它嵌套在公司控制器中。当我尝试此操作时,我会出现一个未经授权的错误:(我的加载和授权资源位是否正确?Jx@JennyBlunt,是的,您的
load\u和\u authorize
部分看起来不错。我认为您在角色声明部分有问题。如果您能提供相关模型中定义的关系,我可以给您更具体的答案。更新了我的答案,请查看。谢谢您的帮助。否,订单没有用户id,因为它嵌套在公司控制器中。当我尝试此操作时,最终出现未授权错误:(我的加载和授权资源位是否正确?Jx@JennyBlunt,是的,您的
load\u和\u authorize
部分看起来不错。我认为您在角色声明部分有问题。如果您能提供相关模型中定义的关系,我可以给您更具体的答案。更新了我的答案,请查看。