Declarative_authorization: контроль доступа к вложенному ресурсу, который не имеет явной модели - PullRequest
1 голос
/ 21 июля 2010

У меня есть модель, которая позволяет пользователю отмечать других пользователей как избранное. Это отношение HABTM определено в модели User:

class User < ActiveRecord::Base
  has_and_belongs_to_many :favorites, :class_name => "User", :join_table => "favorites", :association_foreign_key => "favorite_id", :foreign_key => "user_id"
end

Для FavoritesController требуется только три действия (индексировать, создавать, уничтожить) для управления избранным пользователем.

Правило: только авторизованный пользователь (current_user) может управлять их избранное.

Изначально я пытался представить это правило в authorization_rule.rb Файл:

# allow authenticated user to update profile
has_permission_on :users, :to => :change do
  if_attribute :id => is { user.id }
  has_permission_on :favorites, :to => [:index,:create,:destroy]
end

Это не сработало, возможно потому, что у Фаворита нет явная модель (т. е. избранное.rb). Хотя я могу ошибаться это.

Кажется, правильный подход - это представлять правило в ИзбранноеКонтроллер:

filter_access_to :all, :nested_in => :users
...

Но я не уверен, как правильно представить здесь правило.

Помощь действительно ценится.

** редактировать **

Было предложено использовать контекст для управления доступом в этой ситуации: установка разрешений для контроллера без модели .

Я пытался изменить FavoritesController:

filter_access_to :all, :context => :favorites

Это изменение не имело эффекта.

** / редактировать **

...