7
  • 私の Web アプリケーションでは、スーパー ユーザーが他のユーザーになりすますことを許可したいと考えています。

私の質問:

これを実現するために使用できる一般的に受け入れられている設計パターンはありますか?

  1. 一般的に言えば、セッション内で現在のユーザーと偽装されたユーザーを追跡する必要があると想像できます。
  2. しかし、この変更に伴う複雑さを最小限に抑えたいと考えていることは理解できます。

  3. ちなみに、私のアプリケーションは ASP.NET MVC 2 アプリケーションなので、既存のインフラストラクチャを活用できれば最高です。

編集:フォーム認証を使用しています。

編集:スーパーユーザーが別のユーザーに代わって行動しているという事実も追跡する必要があります。これを行う必要がある理由は 2 つあります。

  1. ロギングは、スーパー ユーザーが別のユーザーに代わって行動したという事実をログに記録する必要があります。
  2. スーパー ユーザーが偽装画面に戻って「コンテキストを切り替え」、別のユーザーになりすますことも考えられます。

編集: @Jordão は、ほとんど実行可能な解決策を提案しました。私の唯一の懸念は次のとおりです-スーパーユーザー(別のユーザーになりすましている間)がホーム画面に移動し、画面の上部に「Hello [User]」と表示されている場合、「Hello [Impersonated User]」として「こんにちは[スーパーユーザー]」とは反対です。そして、@ Jordãoのソリューションにより、この画面や同様の要件を持つ他の画面の実装がより複雑になるのではないかと心配しています。

4

2 に答える 2

2

他のユーザーになりすますのではなく、スーパー ユーザーに十分な権限と専用インターフェイスを与えて、他のユーザーのデータを操作できるようにします。

ロギングまたは監査データがあれば、どのユーザー (通常またはスーパー) がデータを操作したかがわかります。

于 2011-02-04T18:34:12.763 に答える
0
[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}
于 2011-02-04T18:30:34.450 に答える