2017-08-22 24 views
0

je les modèles suivants:Rails Cancancan - autorisant les associations imbriquées

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 

Une partie devrait appartenir à un utilisateur (l'hôte) et l'hôte peut attribuer des co-hôtes qui devraient être en mesure de modifier les détails sur la faire la fête mais pas ajouter/supprimer des co-hôtes. J'ai du mal à définir cette capacité à Cancancan. Cela donne à l'hôte carte blanche pour faire ce qu'ils veulent à la fête - c'est bien.

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

Cela donnerait une co-hôte la possibilité de modifier la partie, ce qui est également bon, mais je ne veux pas que d'inclure l'association party_co_hosts imbriquée.

Dois-je supprimer le accepts_nested_attributes_for et forcer party_co_hosts à créer via un contrôleur distinct plutôt que d'autoriser l'association imbriquée dans le parent? D'autres idées que je manque juste?

Répondre

1

juste une idée peut probablement aider, je pense nouveau design pour votre problème

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 

table de rôle a user_id sur le terrain, party_id et titre sous forme de chaîne, le contenu du titre peut être comme invité ou co -host, si le rôle en tant que co-hôte, l'utilisateur peut modifier le modèle du parti si tant qu'invité ils ne peuvent lire, etc.

et l'autorisation de vérifier que vous pouvez utiliser role base authorization