Rails Cancancan - 授权嵌套关联

时间:2017-08-22 15:52:24

标签: ruby-on-rails cancan cancancan

我有以下型号:

class Party
  belongs_to :user
  has_many :party_co_hosts
  accepts_nested_attributes_for :party_co_hosts
  has_many :co_hosts, through: :party_co_hosts

class CoHost
  belongs_to :party
  belongs_to :co_host, foreign_key: :user_id

class User

一方应该属于一个用户(主机),并且主机可以分配应该能够编辑该方详细信息但不能添加/删除共同主机的共同主机。我很难在Cancancan中定义这种能力。

can :update, Party, user_id: user.id

这让主持人可以按照自己的意愿行事 - 这很好。

can :update, Party do |p|
  p.co_hosts.include? user
end

这会让共同主持人能够编辑聚会,这也很好,但我不希望包含嵌套的party_co_hosts关联。

我应该删除accepts_nested_attributes_for并强制通过单独的控制器创建party_co_hosts而不是允许父级中的嵌套关​​联吗?我还缺少其他想法?

1 个答案:

答案 0 :(得分:1)

只是一个想法可能会有所帮助,我正在考虑为您的问题设计新设计

class User < ApplicationRecord
  has_many :roles
  has_many :parties, through: :roles
end

class Role < ApplicationRecord
  belongs_to :user
  belongs_to :party
end

class Party < ApplicationRecord
  has_many :roles
  has_many :users, through: :roles
end

角色表的字段为user_id,party_id和title为字符串,标题内容可以作为访客或共同主持人,如果角色为共同主持人,则用户可以编辑方模型,如果as客人,他们只能阅读等

然后要检查授权,您可以使用role base authorization