Авторизация пользователя Rails - PullRequest
2 голосов
/ 29 апреля 2010

В настоящее время я создаю приложение на Rails и пытаюсь найти лучший способ проверки подлинности того, что пользователь владеет любым объектом данных, который он пытается отредактировать.

У меня уже есть система аутентификации (restful-аутентификация), и я использую простой before_filter, чтобы убедиться, что пользователь вошел в систему, прежде чем он сможет добраться до определенных областей веб-сайта.

Однако я не уверен, что лучший способ справиться с пользователем, пытающимся редактировать определенный фрагмент данных - например, допустим, что пользователи на моем сайте могут владеть Книгами, и они могут редактировать свойства книги (название, автор, страницы и т. д.), но они должны делать это только для книг, которыми они владеют.

В моем методе 'edit' на контроллере books я мог бы найти, что получаются только книги, принадлежащие current_user. Однако, если другой пользователь знает идентификатор книги, он может ввести http://website.com/book/7/edit, и контроллер проверит, что они вошли в систему, а затем отобразит страницу редактирования для этой книги (кажется, обходит контроллер).

Какой лучший способ справиться с этим? Является ли это более сложной проблемой маршрутизации в Rails, которую я не понимаю (возможность перейти прямо на страницу редактирования), или мне следует добавить обратные вызовы before_find, before_save, before_update, after_find и т. Д. К моей модели?

Ответы [ 5 ]

2 голосов
/ 29 апреля 2010

Вам может понадобиться плагин авторизации. У меня был некоторый опыт использования этого плагина некоторое время назад. Эта статья также имеет обзор:

2 голосов
/ 29 апреля 2010

посмотрите следующие драгоценные камни:

  • канкан
  • Разрабатывает
  • authlogic

и не пропустите отличные рейнскасты Райана на вышеупомянутом

2 голосов
/ 29 апреля 2010

это даст доступ любому, кто меняет значение в адресной строке

@book = Book.find(params[:id])

но если вы пройдете через ассоциацию с вошедшими в систему пользовательскими рельсами (ActiveRecord), то автоматически обновит SQL-запрос

@book = current_user.books.find(params[:id])

конечно, это предполагает, что в вашей таблице книг есть столбец user_id

1 голос
/ 29 апреля 2010

Вы также можете взглянуть на Декларативное разрешение

0 голосов
/ 04 марта 2012

Эй, я недавно сделал это сам. Самый простой способ сделать это - отобразить функцию редактирования на странице, но добавить ее в такой метод, как следующий:

  <%if current_user %>
    <% if current_user.id == wishlist.user_id %>
   <div id="text3"><%= link_to 'Edit', edit_wishlist_path(@wishlist) %></div><br />
    <%end%>
   <%end%>

Это то, на что вы надеялись?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...