私の ASP.net MVC プロジェクトには、(他の役割の中でも) モデレーターとユーザーがいます。モデレーターに「現在のページをユーザーとして表示する」オプションを提供したいと思います。
私のアプローチは、ActionFilterAttribute を作成し、OnActionExecuting と OnResultExecuted をオーバーロードして、ページが特定のユーザーにレンダリングされるようにすることです。
そこにある最初のアイデアは、役割とうまくやりくりすることでした:
OnActionExecuting {
... //various checks, if role exist, if user want to switch
var tempRoles = Roles.getRolesForUser(user);
filterContext.HttpContext.Items["tempRole"] = tempRoles;
Roles.RemoveUserFromRoles(user, tempRoles)
Roles.AddUserToRole(user, targetRole);
}
その後
OnResultExecuted {
//if switched view
{
Roles.RemoveUserFromRole(user,targetRole)
Roles.AddUserToRoles(filterContext.HttpContext.Items["tempRole"])
}
これは機能しますが、最悪のシナリオでは役割がなくなっているので、私はそれらに触れないことを好みます...
私の 2 番目のアイデアは、ダミー ユーザーを作成し、彼を userroles に追加し、FormsAuthentication.SetAuthCookie(dummyUser, true) を使用してモデレーターをこのアカウントにサインインさせ、OnResultExecuted のすべてを元に戻すことでした。彼はログアウトできます)、dummyUser はデータベースにあります。
デバッグと調査の後、SetAuthCookie を有効にするには Redirect が必要であることに気付きました。そのため、この方法では機能しません。
質問:
- リダイレクトせずに SetAuthCookie を強制的に有効にする方法はありますか
- この「他のユーザーとしてページを見る」を達成するための他の提案/アプローチはありますか?
- 私の最初のアイデアが唯一の解決策である場合、どうすれば誰でも簡単に解決できますか?