У меня есть две модели (Предмет и Тема). Они оба принадлежат третьим пользователям модели с ассоциацией has_many (у пользователя много тем и элементов). И Item, и Theme have_many: images.
Модель Image является полиморфной ассоциацией, поэтому в таблице есть столбцы 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
Есть идеи? Заранее спасибо!