2010-03-13 4 views
7

J'ai une relation many-to-many comme celle-ci: Un utilisateur a beaucoup d'organisations grâce à des affiliations et vice-versa. J'utilise des organisations déclaratives et je veux seulement qu'un utilisateur édite une organisation particulière s'il est affilié et que l'attribut affiliationtype d'affiliation est une valeur particulière.if_attribute sur l'autorisation déclarative

Alors affiliations a 3 colonnes, user_id, organization_id et affiliationtype_id

que je peux faire:

o = Organization.find(:first) 
o.affiliatons[0].user and get the user 

maintenant je veux faire ceci:

has_permission_on [:organizations], :to => :edit do 
    if_attribute (...) 
end 

Ce if_attribute devrait voir si le l'utilisateur actuel est l'organisation.affiliation [?]. utilisateur et si l'organisation.affiliation [?]. affiliationtype_id = "3"

J'espère que c'est un problème de syntaxe ... J'ai vraiment besoin de fonctionner.

Répondre

7

EDIT:

Vous pouvez restreindre le type d'affiliation avec intersects_with (& bloc):

has_permission_on [:organizations], :to => :edit do 
    if_attribute :affiliations => intersects_with { 
     user.affiliations.with_type_3 
    } 
    end 

Pourquoi ne pas créer un named_scope pour trouver des affiliations dont affiliationtype_id = 3?


De declarative_authorization documentation:

Pour réduire la redondance dans les blocs de has_permission_on, une règle peut dépendre des autorisations sur des objets associés:

authorization do 
    role :branch_admin do 
    has_permission_on :branches, :to => :manage do 
     if_attribute :managers => contains {user} 
    end 

    has_permission_on :employees, :to => :manage do 
     if_permitted_to :manage, :branch 
     # instead of 
     #if_attribute :branch => {:managers => contains {user}} 
    end 
    end 
end 
+0

je peux trouver l'utilisateur et de valider le match. Mais j'ai besoin de trouver l'utilisateur ET de voir si l'affiliation a un type d'affiliation d'un certain ID. Je peux obtenir est user_id, mais comment puis-je voir le type d'affiliation de cet user_id? Je ne comprends pas ... –

+0

Voir mon édition, je pense que cela peut aider. Il n'y a qu'un objet d'affiliation à un ou zéro qui croise les affinités Organization.affiliations et user.affiliations.with_type_3 (suggestion named_scope). – nanda

+0

presque ... cela fonctionne sur la console me donne une seule valeur pour l'utilisateur: v.affiliations.type_admin mais le if_attribute: affiliations => {intersects_with user.affiliations.type_admin } jamais valide true –

Questions connexes