7

Ich habe zwei Modelle (Artikel und Thema). Sie gehören beide einem dritten Modell Benutzer mit einer Zuordnung has_many (Benutzer hat viele Themen und Elemente). Sowohl Artikel als auch Thema have_many: images.Ruby: Declarative_authorization polymorphe Assoziationen

Das Image-Modell ist eine polymorphe Assoziation, daher hat die Tabelle die Spalten imageable_id und imagable_type. Wenn ich mit der ID 1 sowohl einem Punkt hatte und ein Thema mit der ID 1 die Tabelle aussehen würde

id imageable_id imageable_type 
------------------------------------ 
1  1    Item 
2  1    Theme 

ich declarative_authorization bin mit den SQL-Abfragen aus der Datenbank neu schreiben Benutzer zu halten Zugriff auf Objekte außerhalb ihrer Konto. Ich möchte eine Autorisierungsregel schreiben, die es einem Benutzer ermöglicht, ein Bild nur zu lesen, wenn er das Objekt lesen kann, dessen Eigentümer es ist. Ich kann nicht scheinen, um die richtige Syntax zu bekommen (vielleicht ist es nicht unterstützt):

has_permission_on [:images], :to => [:manage], :join_as => :and do 
    if_attribute :imageable => is { "Item" } 
    if_permitted_to :manage, :items # Somehow I need to tell declarative_auth to imageable_id is an item_id in this case. 
end 

Dann würde ich eine andere Regel die oben aber für Themen nachahmt:

has_permission_on [:images], :to => [:manage], :join_as => :and do 
    if_attribute :imageable => is { "Theme" } 
    if_permitted_to :manage, :themes # Somehow I need to tell declarative_auth to imageable_id is a theme_id in this case. 
end 

Irgendwelche Ideen? Danke im Voraus!

  • Corith Malin
+0

Sehr altes Juwel, polymorphe Assoziationen scheint nicht unterstützt zu werden: https://github.com/stffn/declarative_authorization/issues/114. Warum nicht etwas wie Cancancan verwenden? https://github.com/CanCanCommunity/cancanc – gdurelle

+0

Ich meine ... Es war kein altes Juwel, als ich dies schrieb und im Jahr 2010 gepostet. –

Antwort

0

Es scheint, dass Sie einen Fehler in has_permission_on Methode

Als ich eincheckte über has_permission_on und if_attribute

has_permission_on(:images, :to => :manage, :join_as => :and) do 
    if_attribute :imageable => "Item" 
    if_permitted_to :manage, :items 
    end 

Hope this Hilfe Sie verpflichten !! !

+0

@Corith Malin Lassen Sie uns wissen, ob unsere Antwort für Sie arbeiten oder nicht ? – VKatz