現在どのユーザーがリクエストを行っているかを知る必要がある監査証跡を作成しています。私の監査証跡は、監査が必要なものを受け取るためにActiveSupport::Notificationsを使用して作成されています。
私がやりたいのは、ActiveSupport :: Concernを使用して、監査のニーズに合わせてロジックをカプセル化することです。これにより、システム内の任意のモデルに監査を簡単に追加できます。
一般に、これは簡単に実行できます。私もしばらく前にそれについてブログを書きました。ただし、現在のユーザーがWebサーバーにリクエストを送信していることを確認する方法を理解するのに苦労しています。これにより、監査証跡で誰がどのような変更を行っているかをログに記録できます。
「モデルでcurrent_userを取得するにはどうすればよいですか」という質問がたくさんあることは知っていますが、モデルでそれを行うことについては質問していないので、より良い回答が得られることを期待しています。私の監査コードはインフラストラクチャに関連しているので、処理中の現在のリクエスト、または現在ログインしている/リクエストを行っている人を明確に教えてくれる何かを利用できる方法があることを望んでいます。
スレッドストレージを使用してcurrent_userをそこに配置するという「回答」をたくさん読みました。他の人が好まない多くの理由から、私はこの答えが好きではありません-スレッドストレージが安全であるという保証はありません。サーバーが同じスレッドを使用して複数のリクエストを処理する場合など、複数のリクエストにまたがってブリードする可能性があります。
つまり...モデルからcurrent_userにアクセスしようとしているのではなく、ActiveSupport::ConcernまたはActiveSupport::Notificationsイベントサブスクリプションからアクセスしようとしているとすると、現在のユーザーが誰であるかを知るための良いオプションはありますか?
アップデート
私は認証にdeviseを使用しています。これは、バックエンドでWardenを使用します。deviseは、を呼び出すことによってcurrent_userを取得しますrequest.env['warden'].authenticate(:scope => :user)
(認証に「ユーザー」モデルを使用すると仮定します)。
request
懸念事項または通知サブスクリプション内から現在のオブジェクトにアクセスする方法はありますか?.NETの時代に戻ると、電話をかけることができHttpContext.Current.Request
、すべてが順調でした。Railsで同等のものは何ですか?