В моем новом проекте у меня есть ресурс Ставка, который другие пользователи могут читать только в том случае, если они являются владельцами ставки или его друзьями. Основная проблема возникает, когда я хочу определить возможности для действия index. В действии индекса блок не выполняется, поэтому я думаю, что это не вариант.
Проиллюстрируем это. Если бы я хотел, чтобы только владелец мог индексировать ставки, этого было бы достаточно:
can :read, Bet, :user => { :id => user.id }
Но мне нужно, чтобы допустимые идентификаторы были диапазоном, определенным всеми друзьями пользователя. Что-то типа:
if (bet.user == user) || (bet.user.friends.include? user)
can :read, Bet
end
Но это неправильный синтаксис CanCan.
Я предполагаю, что у многих людей были проблемы с CanCan и вложенными ресурсами, но я до сих пор не видел ответа на этот вопрос.