次の ntier アプリがあります: MVC > サービス > リポジトリ > ドメイン。フォーム認証を使用しています。現在ログインしているアプリケーションのユーザーを取得するために MVC レイヤーの外部で Thread.CurrentPrincipal を使用しても安全ですか? それとも HttpContext.Current.User を使用する必要がありますか?
私が尋ねる理由は、Thread.CurrentPrincipal の周りにいくつかの問題があるようですが、将来的に非 Web フォント エンドを提供する必要がある場合に備えて、MVC レイヤーの外側に System.Web への参照を追加するように注意しています。
アップデート
これまでに受け取ったアドバイスに従って、呼び出されるメソッドのパラメーターの一部としてユーザー名をサービスに渡しました。これにより、元の質問が改善されました。多くの Service および Domain メソッドで、ユーザーが特定のロールに属しているかどうかを確認できる必要があります。これにはいくつかの解決策があるようですが、どれが最善の方法なのか疑問に思っています。
- ユーザー名だけでなく、HttpContext.Current.User 全体をパラメーターとして渡します。
- Web 層の外で Thread.CurrentPrincipal を呼び出し、それを使用します。しかし、それが HttpContext.Current.User と等しいことを確認するにはどうすればよいでしょうか?
- これまでに提案されたようにユーザー名を渡すことに固執し、Roles.IsUserInRole を使用します。このアプローチの問題は、System.Web への参照が必要であり、MVC レイヤーの外では正しくないと感じていることです。
どのように進めることをお勧めしますか?