У меня две модели (Предмет и Тема). Оба они принадлежат пользователям третьей модели с ассоциацией has_many (у пользователя много тем и элементов). И у предмета, и у темы есть_many: images.
Модель изображения представляет собой полиморфную ассоциацию, поэтому в таблице есть столбцы imageable_id и imageable_type. Если бы у меня были и элемент с идентификатором 1, и тема с идентификатором 1, таблица выглядела бы так:
id imageable_id imageable_type
------------------------------------
1 1 Item
2 1 Theme
Я использую declarative_authorization для перезаписи SQL-запросов моей базы данных, чтобы пользователи не могли получить доступ к элементам за пределами их учетной записи. Я хотел бы написать правило авторизации, которое позволит пользователю читать изображение, только если он может читать принадлежащий ему элемент. Кажется, я не могу получить правильный синтаксис (возможно, он не поддерживается):
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
Тогда у меня было бы другое правило, имитирующее приведенное выше, но для тем:
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
Любые идеи? Заранее спасибо!
- Корит Малин