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
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
Quiero decir ... No fue una gema antigua cuando escribí esto y lo publiqué en 2010. –