В настоящее время я создаю приложение на Rails и пытаюсь найти лучший способ проверки подлинности того, что пользователь владеет любым объектом данных, который он пытается отредактировать.
У меня уже есть система аутентификации (restful-аутентификация), и я использую простой before_filter, чтобы убедиться, что пользователь вошел в систему, прежде чем он сможет добраться до определенных областей веб-сайта.
Однако я не уверен, что лучший способ справиться с пользователем, пытающимся редактировать определенный фрагмент данных - например, допустим, что пользователи на моем сайте могут владеть Книгами, и они могут редактировать свойства книги (название, автор, страницы и т. д.), но они должны делать это только для книг, которыми они владеют.
В моем методе 'edit' на контроллере books я мог бы найти, что получаются только книги, принадлежащие current_user. Однако, если другой пользователь знает идентификатор книги, он может ввести http://website.com/book/7/edit, и контроллер проверит, что они вошли в систему, а затем отобразит страницу редактирования для этой книги (кажется, обходит контроллер).
Какой лучший способ справиться с этим? Является ли это более сложной проблемой маршрутизации в Rails, которую я не понимаю (возможность перейти прямо на страницу редактирования), или мне следует добавить обратные вызовы before_find, before_save, before_update, after_find и т. Д. К моей модели?