Вы знаете, я думаю, что я должен проверить текущего пользователя в обратных вызовах модели (например, before_update
). Вместо того, чтобы полагаться исключительно на добавление where ('something.user_id = ?', 'current_user.id')
в контроллеры. Мне нужно что-то вроде Thread.CurrentPrincipal
в .NET
Безопасно ли указывать ссылку на текущего пользователя в пользовательской модели? Извините, я не совсем понимаю, как это работает под капотом.
Или как ты это делаешь в Rails?
Извините, если это глупый вопрос.
Добавлено 3/27
К сожалению
Чтобы получить правильный ответ, вы должны задать правильный вопрос. И это не простая задача сама по себе. Как может быть, что вопросы других людей настолько неясны, и они получают свои ответы, а ваш собственный вопрос настолько ясен, но никто не понимает этого? :)
Я не понимаю, где поставить проверку безопасности. Именно пользователь получит доступ только к своим вещам. На уровне контроллера? А потом проверить каждое действие? "не должен / просмотр | создавать | редактировать | уничтожать / другие вещи пользователя"? Я подумал, может быть, я могу поместить его в модель и иметь одно место для / записи | рефактора | теста /. Вот почему я спросил о том, как я могу получить ссылку на текущего пользователя.
На самом деле я удивлен, что не нашел ничего релевантного в Rails Guides или Blogs. Было задано несколько вопросов, но никаких авторитетных «лучших практик», кроме «не делай этого».
Подумав немного, я решил просто создать в контроллере before_filter область видимости, доступную текущему пользователю, и просто положиться на свое собственное соглашение (пообещал себе, что не буду напрямую обращаться к модели). И просто протестируйте его один раз для каждого контроллера. В любом случае, это не банковское приложение.