Как получить доступ к current_user из уведомления Rails?

Я создаю контрольный журнал, который должен знать, какой пользователь в данный момент делает запрос. Мой контрольный журнал построен с использованием ActiveSupport :: Notifications для получения четных данных, которые необходимо проверять.

Я бы хотел использовать ActiveSupport :: Concern для инкапсуляции логики для моих потребностей аудита, чтобы я мог легко добавить аудит к любой модели в моей системе.

В целом это легко сделать. Я даже некоторое время назад писал об этом в блоге . Однако мне сложно понять, как заставить текущего пользователя делать запрос к веб-серверу, чтобы я мог регистрировать, кто какие изменения вносит в мой контрольный журнал.

Я знаю, что существует тонна вопросов о том, «как мне получить current_user в моей модели», но я не спрашиваю о том, как сделать это в модели, поэтому я надеюсь, что есть лучший набор ответов. Поскольку мой код аудита связан с инфраструктурой, я надеюсь, что есть способ подключиться к текущему запросу, который обрабатывается, или что-то еще, что окончательно скажет мне, кто в настоящее время вошел в систему / делает запрос.

Я читал много «ответов», в которых говорится, что нужно использовать хранилище потоков и поместить туда current_user. Мне не нравится этот ответ по многим причинам, которые не нравятся другим - нет гарантии, что хранилище потоков безопасно. он может истекать кровью по нескольким запросам, если сервер использует один и тот же поток для обработки нескольких запросов и т. д.

так что ... учитывая, что я не пытаюсь получить доступ к current_user из моей модели, а скорее из ActiveSupport :: Concern или Подписка на события ActiveSupport :: Notifications, есть ли у меня хорошие возможности узнать, кто является текущим пользователем?

Обновление

Я использую устройство для аутентификации, которое использует Warden на задней панели. devise извлекает current_user, вызывая request.env ['warden']. authenticate (: scope =>: user) (при условии, что я использую модель «User» для аутентификации).

Могу ли я получить доступ к текущему объекту запроса из моей подписки на уведомление или беспокойство? В те времена, когда я работал с .NET, я мог бы вызвать HttpContext.Current.Request , и все было бы хорошо. Что эквивалентно в Rails?

6
задан Derick Bailey 29 June 2011 в 03:16
поделиться