Ruby: декларативная_авторизация полиморфных ассоциаций

У меня есть две модели (Предмет и Тема). Они оба принадлежат третьим пользователям модели с ассоциацией 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

Есть идеи? Заранее спасибо!

  • Корит Малин
7
задан Corith Malin 3 September 2010 в 23:28
поделиться