Разрешение за асоцииране с 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