Ruby on rails CanCan双嵌套资源权限问题
我在定义两次嵌套资源的权限时遇到一些问题。我有用户>公司>订单 我的用户通过协议拥有许多公司 每个公司都有许多订单,每个订单都属于一个公司 My Ababilities.rb文件包含以下内容: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
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
部分看起来不错。我认为您在角色声明部分有问题。如果您能提供相关模型中定义的关系,我可以给您更具体的答案。更新了我的答案,请查看。