Я строю контрольный журнал, который должен знать, какой пользователь сейчас делает запрос. Моя аудиторская тропа построена с использованием ActiveSupport :: Notifications для получения даже того, что должно быть проверено.Как получить доступ к current_user из Уведомления Rails?
Что я хотел бы сделать, это использовать ActiveSupport :: Concern, чтобы инкапсулировать логику моих потребностей аудита, чтобы я мог легко добавить аудит в любую модель моей системы.
В целом это легко сделать. Я даже blogged about it a while back. Тем не менее, мне сложно определить, как заставить текущего пользователя делать запрос на веб-сервер, чтобы я мог регистрировать, кто вносит изменения в мой контрольный журнал.
Я знаю, что есть тонна вопросов о том, «как мне получить current_user в моей модели», но я не прошу сделать это в модели, поэтому я надеюсь, что есть лучший набор ответов. Поскольку мой код аудита связан с инфраструктурой, я надеюсь, что каким-то образом я могу использовать текущий обработанный запрос или что-то еще, что бы окончательно сказать мне, кто в настоящее время входит в систему/делает запрос.
Я прочитал много «ответов», которые говорят, что используют хранилище потоков и помещают current_user туда. Мне не нравится этот ответ по многим причинам, которых нет у других - нет гарантии, что хранение потоков безопасно. он может просачиваться через несколько запросов, если сервер использует тот же поток для обработки нескольких запросов и т. д.
так ... учитывая, что я не пытаюсь получить доступ к current_user из своей модели, а скорее из ActiveSupport :: Concern или ActiveSupport :: Уведомление о регистрации событий, есть ли какие-либо хорошие варианты для того, чтобы узнать, кто является текущим пользователем?
Update
Я использую разработать для аутентификации, которая использует Страж на заднем конце. devise извлекает current_user, вызывая request.env['warden'].authenticate(:scope => :user)
(предполагая, что для аутентификации я использую модель «Пользователь»).
Есть ли способ получить доступ к текущему объекту request
из моей заинтересованности или подписки на уведомления? Вернувшись в мои .NET-дни, я мог бы позвонить HttpContext.Current.Request
, и все будет хорошо. Что эквивалентно в Rails?
спасибо за исправление ссылки. :) вот-вот должен был это сделать и увидел, что вы позаботились об этом! –
Вы нашли решение для этого? Если да, напишите об этом. Благодарю. – Shreyas