2017-08-22 4 views
0

I持って次のモデル:Railsの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関連を含めたくありません。

を削除し、親にネストされた関連付けを許可するのではなく、別のコントローラで強制的にparty_co_hostsを作成する必要がありますか?私が見逃している他のアイデア?ただアイデアは、おそらく助けることができる

答えて

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 

ロールテーブルは、文字列は、タイトルコンテンツがゲストやCOなどのことができるように、フィールドのuser_id、party_idとタイトルを持っています共同ホストとしての役割は、ユーザーがパーティーのモデルを編集することができた場合に-host、ゲストとして彼らは唯一など

を読むことができ、その後、承認をチェックするためにあなたが使用できるかどうrole base authorization

関連する問題