1

ASP.NET MVC3 を使用して Web アプリを作成します。必須フレームワークには、NHibernate (Fluent)、Ninject、Razor、Automapper、Jquery、Rhino-Security が含まれます。

状態管理戦略 (セッションおよびキャッシュ レベル) を決定する必要があります。次のキャッシングタイプについて聞いたことがありますが、

  1. 出力キャッシュ
  2. ドーナツ(ホール)キャッシング
  3. データキャッシング

一般的なシナリオを考慮して、リクエスト中に使用される状態管理ポリシーを理解したいのですが、

ログインする

  1. ユーザーはサイトにアクセスしますが、まだ認証されていないため、FormsAuth モジュールによってログイン ページにリダイレクトされます(質問 - ログイン ページはユーザー固有ではないため、間違いなく出力キャッシュの候補です。しかし、ビューは純粋な HTML であり、MVC によって逐語的にフラッシュされるため、すべての利点があります。キャッシュを使用して)

ページアクセス

  1. Rhino セキュリティを使用しているため、ナビゲーションは個々のユーザーに割り当てられたアクセス許可に依存します。各ユーザーには特定の権限が割り当てられている場合がありますが、ほとんどのユーザーは、そのユーザーが属する UseGroup に割り当てられた権限を持っていますナビゲーションの作成は 2 段階のプロセスです。ユーザーのアクセス許可セットの取得とナビゲーション UI の生成です。ここに 2 つの Q があります (質問 1 - アクションの承認とナビゲーションの作成のために、各ページにアクセスするたびに現在のユーザーのアクセス許可が必要になるため、どこに保存するか - セッション?質問 2 - ナビゲーションも可能性があります最初のアクセスのためにユーザーごとに作成され、セッションに保存されますが、特定のユーザーが指定されていない限り、UserGroup 内の各ユーザーで同じになることを認識しています。そのため、特定の権限セットのハッシュを作成し、ナビゲーションをデータ キャッシュに保存するか、Nav UI の作成を担当する Child アクションで VarByCustom を使用して出力キャッシュを有効にすることができます)

冗長すぎることがわかりました。実際にはもっと質問がありますが、最初にsmbdyが本当にこれほどのがらくたを読むのに苦労しているかどうかを確認させてください

4

1 に答える 1

0

ユーザー権限については、各ユーザー グループで同じであるため、次のようにキャッシュに保存します。

if (System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] == null)
{
    _Permissions = DAL.getPermissions("UserGroup1") as List<Permissions>;
    System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] = _Permissions;
}
else
{
    _Permissions = System.Web.HttpContext.Current.Cache["UserGroup_1_Permissions"] as List<Permissions>;
}

この方法では、HttpContext.Current.Cache に格納されるため、初回のみ DB から取得します。

于 2012-04-04T15:42:14.883 に答える