Я думаю, что в обновлении с более ранней версии CanCan что-то изменилось.
Я обнаружил, что проблема на самом деле была в моем контроллере.В моем контроллере у меня было:
load_and_authorize_resource :user
load_and_authorize_resource :tour, :through => :user
Я мог использовать вышеупомянутое, и «browse_tours» все еще был доступен для гостевых пользователей.
Чтобы обойти это, я сказал cancan не беспокоиться о выполнении авторизации надействие:
load_and_authorize_resource :user
load_and_authorize_resource :tour, :through => :user, :except => :browse_tours
Это имеет и не имеет смысла.В powers.rb мы создаем экземпляр User (без каких-либо ролей), если человек не вошел в систему (как в http://asciicasts.com/episodes/192-authorization-with-cancan).
EG
user ||= User.new
if user.has_role? :admin
#allow admin to do stuff
elsif user.has_role? :normal
#allow signed in user to do stuff
else
#guest user so allow to read
can [:read, :browse_tours], Tour
end
This 'Пользователю без ролей было разрешено делать определенные вещи, но по какой-то причине это не срабатывает в новой версии CanCan.
В любом случае, надеюсь, это объяснение поможет кому-то другому.