私はEntityFramework5で作業しています。ユーザー認証にMicrosoftActiveDirectoryを使用しています。適切なn層アーキテクチャを使用しているため、ほとんどの場合、ビジネス層はUIを幸いにも認識していません。
これで、完全な監査証跡を保持する必要があります。データベースで書き込み操作が発生するたびに、誰が変更を加えたかとともに、それを監査ログに保存する必要があります。
書き込みをキャッチするのは比較的簡単なはずです。SaveChanges()
データコンテキストでオーバーライドし、を使用しObjectStateManager
てすべての挿入、更新、および削除を検索します。実際の問題は、現在のユーザーが誰であるかを検出することです。これは、認証がプレゼンテーション層で行われ、ビジネス層のDLLがIISでホストされ、任意の数のクライアントプロセスにサービスを提供するためです。
ビジネスレイヤー内で、クライアントによって使用された認証資格情報を検出する方法はありますか?APIのすべてのインターフェースにユーザーIDを渡す必要は絶対にありません!
(FWIW、私はEntityFramework.Extendedも使用しています。これは、ネイティブのAuditLog機能を備えていると思われますが、ドキュメントがひどく不十分です。これを正常に使用した経験のある人はいますか?)