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