2009-07-18 14 views
3

私の問題は非常に単純です - 私は思っています。私はASP.NET MVCプロジェクトをやっています。これは、ユーザーがいつでもログインする必要があるプロジェクトです。私はおそらくMasterPageに現在のユーザーの情報が必要です。 "Howdy、Mark - あなたはログインしています!"各リクエストでユーザーデータを取得します

しかし、ビューに同じ情報が必要な場合はどうすればよいですか?私のservicelayerのいくつかの検証ですか?

この情報が必要なときに利用可能であること、そして必要な場所を確認するにはどうすればよいですか?

答えて

2

どのくらいのユーザー情報が必要ですか? Thread.Current.Principalにいつでもアクセスしてユーザの名前を取得できます。おそらくそれを使用して、データベースのユーザに関する詳細情報を参照します。

いつも本当に本当に本当に情報が必要な場合は、IPrincipalから派生した独自のカスタムプリンシパルを実装することができます(これは本当に大きな問題ではありません)。ユーザーがログインし、MyCustomPrincipalのインスタンスを作成し、それを現在のスレッドにアタッチします。その後、いつでも、どこでも、いつでも利用できます。

マルク

私はあなたが聞きしたいものを得るが、あなたは、認証とロールベースの認可のようなものを探している場合、実際にASP.netは上で動作するのに最適なフレームワークを提供している場合
1

私はまったく同じ問題を抱えていて、まだ満足のいく答えを見つけていません。調査したすべてのオプションにはさまざまな問題がありました。具体的な例で言えば、明らかにそのデータをセッションに格納することができます。私たちが持っていた他のシナリオがあるかもしれません。それはうまくいかないかもしれませんが、そのような単純なユーザー情報はセッションでうまくいくはずです。

情報が常に設定され、各ビューで正しいことを確認するためのBaseControllerをセットアップしました。認証などをどのように処理しているかによって、HttpContext.User.Identity.Nameで利用できるユーザーデータが常にあります。どちらも参照することができます。

0

モデルの階層を作成し、共有モデルを基底モデルに配置します。これにより、任意のビューまたは部分ビューで使用できるようになります。

もちろん、Webアプリケーションは永続的ではないため、各リクエストで検索する必要があります。

0

これをSessionに保存し、カスタムModelBinder経由でコントローラに取り込む必要があります。

+0

セッションを使用する際に問題が発生した場合の唯一の問題は、現在のサイトの領域によって異なる可能性があるデータです。たとえば、アプリのシリーズには一連のリーグがあります。ユーザーはマネージャーになることがあります。ユーザーがセッション内で管理しているかどうかを保存する必要があります。これは、複数のタブを開いてから、すべてが非常に乱雑になり始めるまで素晴らしいです。したがって、ログイン情報の場合は機能しますが、他のデータのためにその情報を使用し始めると落ちます。 – pauldunlop

+0

問題の一部をより詳しく説明できますか?より多くの役割を使ってあなたのログインモデルを連合させることを見たいかのように聞こえます。 –

+0

それほど単純ではありません。サイトのさまざまな要素に複数の役割を持つユーザーが1人あります。以下のmarc_sの提案は、実際に私たちにとってその問題に対処するかもしれません。私たちはそれが良い解決策を提供しているかどうかを確認するために、もう少しそれを試しています。 – pauldunlop

0

わからない/で始まります。

article(これも2番目の部分もあります)は、私が最近発見したもので、ASP.netの基盤となる認証フレームワークを理解するのに役立つプロバイダーパターンで本当にうれしいです。 membershipProviderクラスとRoleProviderクラスについても、msdnで読むことをお勧めします。彼らは一緒に働くために最も基本的な役割ベース認証の素晴らしいフレームワークを作ります(あなたが提供する機能に慣れていれば、コードデータアクセス部分は、すべてデフォルトの実装で提供されています!)

PS:Context.Usersプロパティもチェックしてください!現在認証されているユーザー情報を格納します。

0

HttpContext.Current.Users.Identityは、現在のユーザーの情報を返します。あなたがWebサービス呼び出しを行うときに暗黙的に渡されるかどうかはわかりませんが。

関連する問題