私は現在、どのユーザーがリクエストを行っているかを知る必要がある監査証跡を作成しています。私の監査証跡は、ActiveSupport :: Notificationsを使って構築され、それを監査する必要があります。Rails通知からcurrent_userにアクセスする方法は?
私がしたいのは、ActiveSupport :: Concernを使用して自分の監査ニーズのロジックをカプセル化し、システムのどのモデルにも簡単に監査を追加できるようにすることです。
一般的に、これは簡単です。私はさらにblogged about it a while backです。しかし、現在のユーザーにWebサーバーへのリクエストを行う方法を理解するのは難しいので、誰が自分の監査証跡に変更を加えるのかを記録できます。
「私のモデルにcurrent_userを取得するにはどうすればよいですか」という疑問があることは知っていますが、モデルでそれを行うことを求めているわけではないので、より良い回答が得られることを願っています。私の監査コードはインフラストラクチャに関連しているので、現在処理中のリクエストや、現在ログインしている/要求していることを明確に示す何らかの方法があることを期待しています。
私は、スレッドストレージを使用してそこにcurrent_userを置くと言う、多くの "答え"を読んだことがあります。私は他の人がそうしない理由の多くに対してこの答えが嫌いです - スレッドストレージが安全であるという保証はありません。サーバが同じスレッドを複数のリクエストを処理するために同じスレッドを使用する場合、複数のリクエストにまたがって出現する可能性があります。
...私のモデルからcurrent_userにアクセスするのではなく、ActiveSupport :: ConcernまたはActiveSupport :: Notificationsイベントサブスクリプションを使用すると、現在のユーザーが誰であるかを知る良いオプションがありますか?
更新
私はバックエンドでウォーデンを使用する、認証のために考案し使用しています。私はrequest.env['warden'].authenticate(:scope => :user)
を呼び出すことによってcurrent_userを取得します(私は認証のために "User"モデルを使用します)。
私の懸念や通知のサブスクリプションから現在のrequest
オブジェクトにアクセスする方法はありますか?私の.NETの時代に戻って、HttpContext.Current.Request
と呼ぶことができたと思います。 Railsに相当するものは何ですか?
感謝。 :)それをしようとしていたし、あなたがそれを世話していたのを見た! –
この解決策をお探しですか?あなたがした場合、それについて書いてください。ありがとう。 – Shreyas