Авторизация действия с помощью CanCan через взаимосвязь модели

#ruby-on-rails-3 #cancan

#ruby-on-rails-3 #канкан #cancan

Вопрос:

Я использую CanCan и Devise для процессов авторизации в приложении, и все работает отлично.

Однако у нас есть настройка, в которой пользователи могут создавать списки элементов.

Модель списка имеет идентификатор пользователя, и с этим авторизация работает нормально, но владение элементами обрабатывается через связь List :has_many Item, а у элемента фактически нет столбца user_id .

Как CanCan справляется с этим?

Я пытался

 can :manage, Item do |item|
  item.list.user_id = user.id
end
  

но ввод идентификатора элемента в URL-адресе дает каждому пользователю доступ к каждому элементу, независимо от владельца списка.

Я не смог найти ничего, что, казалось, охватывало бы это в wiki на github Cancan’s, поэтому надеялся, что кто-нибудь здесь сможет помочь

С нетерпением жду комментариев, спасибо

Ответ №1:

Вы перепутали = с == ?

 can :manage, Item do |item|
  item.list.user_id == user.id
end
  

Комментарии:

1. Я официально идиот … не могу поверить, что пропустил это. Просто показывает, что после нескольких часов поиска чего-то иногда просто не видно леса за деревьями. Спасибо, что так мягко указали на очевидное 🙂