Ruby: декларативная_авторизация полиморфных ассоциаций - PullRequest
7 голосов
/ 04 сентября 2010

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

Любойидеи?Заранее спасибо!

  • Корит Малин

1 Ответ

0 голосов
/ 23 декабря 2015

Похоже, что вы совершаете ошибку в has_permission_on методе

Когда я проверял has_permission_on и if_attribute

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

Надеюсь, что это поможет вам !!!

...