一部のユーザーが他のユーザーとしてプロキシすることを許可するサイトがあります。そうすれば、サイト全体が、自分がプロキシしているユーザーであるかのように見えるはずです。これを行うには、現在のユーザー オブジェクトを変更します
internal static void SetProxyUser(int userID)
{
HttpContext.Current.User = GetGenericPrincipal(userID);
}
このコードは私にとってはうまくいきます。
サイトでは、プロキシするために、ユーザーはドロップダウンで値を選択し、それを _layout ファイルでそのままレンダリングして、すべてのページに表示します。
@Html.Action("SetProxyUsers", "Home")
SetProxyUsers ビューは次のようになります。
@using (@Html.BeginForm("SetProxyUsers", "Home")) {
@Html.DropDownList("ddlProxyUser", (SelectList)ViewBag.ProxyUsers_SelectList, new { onchange = "this.form.submit();" })
}
このためのコントローラー アクションは次のようになります。
[HttpGet]
public ActionResult SetProxyUsers()
{
ViewBag.ProxyUsers_SelectList = GetAvailableProxyUsers(originalUserID);
return PartialView();
}
[HttpPost]
public ActionResult SetProxyUsers(FormCollection formCollection)
{
int id = int.Parse(formCollection["ddlProxyUser"]);
RolesHelper.SetProxyUser(id);
ViewBag.ProxyUsers_SelectList = GetAvailableProxyUsers(originalUserID);
return Redirect(Request.UrlReferrer.ToString());
}
これはすべて機能します (次にやりたいことを象徴するためにここに入れている originalUserID 変数を除いて)。
私の問題は、ドロップダウン リストの値がログイン ユーザーに基づいていることです。したがって、プロキシを使用してユーザーを変更するときは、プロキシ ドロップダウン リストの値も変更します (「新しい」ユーザーがプロキシを許可されていない場合は非表示にするか、「新しい」ユーザーの使用可能なプロキシ ユーザーのリストを表示します)。 )。
この選択リストを変更しないでおく必要があります。元のユーザーの ID を保存するにはどうすればよいですか? セッション変数に保存することもできますが、潜在的なタイムアウトの問題を台無しにしたくないので、これは最後の手段です。
助けてください。質問に不明な点がある場合はお知らせください。
アップデート
HttpContext
投稿ごとに が設定されていることに気づきませんでした。私はこれまでこの種の作業を実際に行ったことがなく、何らかの理由でセッション全体の値を設定していると思い込んでいました (ばかです、私は知っています)。ただし、Windows認証を使用しています。ユーザーをより永続的に (ブラウザが開いている限り) 変更するにはどうすればよいですか? Windows を認証モードとして使用しているため、FormAuthentication Cookie を使用できないと思いますよね?