Как гарантировать, что пользователь в Rails может обновлять / вставлять / удалять только свою запись в базе данных

#database #ruby-on-rails-3 #authentication #entitlements

#База данных #ruby-on-rails-3 #аутентификация #права

Вопрос:

Извините, если это элементарный вопрос, но я только начал задумываться, правильно ли я все это время делал. Обычно, когда пользователь пытается обновить базу данных, я просто использую его / ее имя пользователя в качестве ключа в таблице пользователей, а затем основываю на этом все операции. Однако я только что понял, что хитрый пользователь МОЖЕТ отправить запрос, используя другое имя пользователя, таким образом, обходя эту слабую форму принудительного предоставления прав. Итак, мой вопрос на самом деле заключается в том, как мне предотвратить потенциальную отправку пользователем деструктивного действия против базы данных под другим идентификатором пользователя?

Ответ №1:

Вы должны сохранить идентификатор текущего пользователя в сеансе, которым нелегко манипулировать.

Я обычно ссылаюсь на объекты через отношение к объекту пользователя:

     current_user.fragile_records.find(params[:id]).destroy
 

Это удобный и простой способ проверки владения.

http://guides.rubyonrails.org/security.html это удивительно хорошее чтение по этому вопросу.

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