Разрешение на ассоциацию с CanCan, Devise и Rolify

У меня есть текущая структура базы данных в моем приложении:

Publisher has_many videos, has_many users
Video      belongs_to publisher
User       belongs_to publisher

Я хочу иметь возможность давать разрешения пользователям на основе издателя, но объект, который фактически редактируется, - это объект видео.

Это означает, что пользователь X может редактировать видео от издателя 1 и 2, а пользователь Y может редактировать видео только от издателя 2 и 3 и так далее. Я почти уверен, что это можно сделать с помощью комбинации CanCan, Devise, Rolify.

Может ли кто-нибудь указать мне правильное направление здесь?


person Gotjosh    schedule 09.08.2012    source источник
comment
Какова логика подключения пользователя X к издателю 1 и 2?   -  person Max    schedule 10.08.2012
comment
Обновил отношения :)! @Максимум   -  person Gotjosh    schedule 10.08.2012


Ответы (1)


извините за задержку ответа. Надеюсь, вы уже поняли свою проблему, но я предоставлю вам решение.

В вашей способности CanCan у вас есть что-то вроде этого:

def initialize(current_user) 
  current_user ||= User.new

  can :update, Video do |video|
    current_user.publisher_list.contains? video.publisher
  end
end

Приведенный выше код будет работать, если user.publisher_list возвращает список издателей, которые пользователь может изменить. Я считаю, что вы также можете сделать:

def initialize(current_user)
  current_user ||= User.new

  can :update, Video, publisher: {id: current_user.publisher_list}
end
person Max    schedule 13.08.2012
comment
Я уже понял это по-другому, но этот тоже работает! Большое спасибо. - person Gotjosh; 22.08.2012