2

ASP.Net MVC 4 アプリケーションを構築しています。ユーザーはログインする必要があり、アカウントはデータベースに対してチェックされます。このデータベースでは、ユーザーは 1 つ以上の部門に関連付けられています。ユーザーが持つ要件は、一度に 1 つの部門に対してのみアプリケーションを使用できることを示しています。

これは、ログインに成功した後、ユーザーがリンクされている部門の数を確認することを意味します。これが 1 つだけの場合は、アクティブな部門になります。複数ある場合は、ユーザーにそのうちの 1 つを選択するように求めます。この選択がアクティブな部門になります。この値は、セッション全体で持続する必要があります。

アプリケーションには、アクティブな部門に属するデータへのアクセスのみを許可する必要がある多くのユース ケースがあります。これらの制限は、ビジネス層、つまり、ASP.Net コンテキストを認識しない C# クラス ライブラリに適用されます。

アクティブな部門に対するユーザーの選択を保持するにはどうすればよいですか? セッションを超えて永続的ではないため、これをデータベースに保存するという考えはあまり好きではありません。一方、私のビジネス層では、すぐに使用できる持続性プロビジョニングが見つかりません。私の ASP.net アプリケーションはセッションを提供しますが、これらはビジネス層には見えません。

この値をセッションに保存し、AuthenticateRequest イベントなどを使用して、アクティブな部門をビジネス層に渡す必要がありますか?

より良い代替手段はありますか?

4

2 に答える 2

3

これらはビジネス層には見えませんか? どう言う意味ですか?

クラスライブラリから実際にセッションにアクセスできます。あなたがしなければならないことはSystem.Web、次に参照することです:

1) コードに名前空間をインポートする

2)var sessionValue = HttpContext.Current.Session["ActiveDepartment"];

ActiveDepartmentまたは、セッションから取得するのではなく、必要なたびにビジネスレイヤーに渡すことができるため、Web アプリケーションに縛られません。

于 2013-03-12T16:34:56.070 に答える
2

アクティブな部門の保存は、セッション変数で行うことができます:

Session["ActiveDepartment"] = 1

ビジネス ロジックにセッション管理は必要ありません。有効にするために、すべての呼び出しに ActiveDepartmentID を提供する必要があるビジネス ロジック アセンブリのラッパーを記述します。ラッパーは常に、ActiveDepartmentID によってフィルタリングされたデータを返します。

これは MVC アプリケーションであるため、すべてのコントローラー アクションで ActiveDepartmentID を要求することにより、コントローラー レベルでこれを強制することもできます。

于 2013-03-12T16:34:36.987 に答える