2010-03-13 3 views
7

Ich habe eine Viele-zu-Viele-Beziehung wie folgt: Ein Benutzer has_many Organisationen durch Zugehörigkeiten und umgekehrt.if_attribute auf deklarative Autorisierung

Ich verwende deklarative Organisationen und ich möchte nur einen Benutzer eine bestimmte Organisation bearbeiten, wenn er angegliedert ist und das Zugehörigkeitstyp-Attribut der Zugehörigkeit einen bestimmten Wert ist.

So hat Zugehörigkeiten 3 Spalten, user_id, organization_id und affiliationtype_id

kann ich tun:

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

jetzt wünsche ich, dies zu tun:

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

Das if_attribute sehen sollte, wenn die derzeitiger Benutzer ist die Organisation.Vereinigung [?]. Benutzer und wenn die Organisation.Aganzierung [?]. Zugehörigkeitstyp_ID = "3"

Ich hoffe, das ist Syntaxproblem ... Ich muss wirklich funktionieren.

Antwort

7

EDIT:

Sie können die Art der Zugehörigkeit zu intersects_with beschränken (& Block):

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

Warum nicht eine named_scope Zugehörigkeiten zu finden, deren affiliationtype_id = 3?


Von declarative_authorization documentation:

Um Redundanz in has_permission_on Blöcken zu reduzieren, kann eine Regel auf Berechtigungen für zugehörige Objekte abhängen:

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

ich den Benutzer finden und das Spiel zu validieren. Aber ich muss den Benutzer finden und sehen, ob Zugehörigkeit einen Zugehörigkeitstyp einer bestimmten ID hat. Ich kann bekommen, ist user_id, aber wie sehe ich für den Affiliationtyp dieser user_id? Ich verstehe es nicht ... –

+0

Sehen Sie meine Bearbeitung, ich denke, das kann helfen. Es gibt nur ein oder kein Zugehörigkeitsobjekt, das sich mit Organization.affiliations und user.affiliations.with_type_3 (named_scope-Vorschlag) überschneidet. – nanda

+0

fast ... funktioniert dies auf der Konsole mir nur einen Wert für den Benutzer geben: v.affiliations.type_admin aber die if_attribute: Zugehörigkeiten => intersects_with { user.affiliations.type_admin } nie validiert true –