7

Tengo dos modelos (artículo y tema). Ambos son propiedad de un tercer modelo. Usuarios con una asociación has_many (el usuario tiene muchos temas y elementos). Tanto el elemento como el tema tienen muchas imágenes.Ruby: Declarative_authorization polymorphic associations

El modelo de imagen es una asociación polimórfica por lo que la tabla tiene las columnas imageable_id y imageable_type. Si tuviera tanto un elemento con el ID 1 y un tema con identificador de la tabla 1 se vería

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

estoy usando declarative_authorization para volver a escribir las consultas SQL de mi base de datos para que los usuarios accedan a elementos fuera de su cuenta. Me gustaría escribir una regla de autorización que permita a un usuario leer una imagen solo si puede leer el elemento que posee. Me parece que no puede obtener la sintaxis correcta (tal vez no está soportado):

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 

entonces tendría otra regla imitando los anteriores, pero para los temas:

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 

alguna idea? ¡Gracias por adelantado!

  • Corith Malin
+0

Gema muy antigua, las asociaciones polimórficas no parecen ser compatibles: https://github.com/stffn/declarative_authorization/issues/114. ¿Por qué no utilizar algo como cancancan? https://github.com/CanCanCommunity/cancancan – gdurelle

+0

Quiero decir ... No fue una gema antigua cuando escribí esto y lo publiqué en 2010. –

Respuesta

0

Parece que se comete un error en la has_permission_on método

Como he comprobado sobre has_permission_on y if_attribute

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

Esperanza ayuda esto !! !

+0

@Corith Malin Háganos saber si nuestra respuesta funciona para usted o no ? – VKatz