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

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

1 Ответ

2 голосов
/ 30 октября 2011

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

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

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

Это читабельный и простой способ сделать тест на владение.

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

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

...