我有以下型号:
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
而不是允许父级中的嵌套关联吗?我还缺少其他想法?
答案 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