Веб-приложения: разрешить суперпользователям выдавать себя за других пользователей. Существует ли для этого шаблон проектирования? - PullRequest
7 голосов
/ 04 февраля 2011
  • В моем веб-приложении я хотел бы разрешить суперпользователям выдавать себя за других пользователей.

Мой вопрос:

Существует ли общепринятый шаблон проектирования, который я мог бы использовать, чтобы это произошло?

  1. Вообще говоря, я могу себе представить, что мне нужно будет отслеживать текущего пользователя и выдавшего себя за пользователя внутри сеанса.
  2. Но вы можете понять, что я хотел бы минимизировать сложность, связанную с этим изменением.

  3. Кстати, мое приложение является приложением ASP.NET MVC 2, поэтому, если бы я мог воспользоваться любой существующей инфраструктурой, это было бы здорово.

РЕДАКТИРОВАТЬ: Я использую проверку подлинности с помощью форм.

РЕДАКТИРОВАТЬ: Мне также нужно отслеживать тот факт, что суперпользователь действует от имени другого пользователя. Мне нужно сделать это по двум причинам:

  1. Ведение журнала должно регистрировать тот факт, что суперпользователь действовал от имени другого пользователя.
  2. Возможно, что суперпользователь захочет вернуться на экран олицетворения, чтобы "переключить контекст" и выдать себя за другого пользователя.

РЕДАКТИРОВАТЬ: @ Jordão предложил наиболее работоспособное решение . Моя единственная проблема заключается в следующем: если суперпользователь (при олицетворении другого пользователя) переходит на домашний экран, а в верхней части экрана отображается «Hello [User]», я хочу, чтобы он сказал «Hello [Impersonated User]» как в отличие от «Привет [Супер пользователь]». И я боюсь, что решение @ Jordão усложнит реализацию этого экрана и других экранов с аналогичными требованиями.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

Не выдавайте себя за других пользователей, но предоставьте суперпользователям достаточно полномочий и эксклюзивных интерфейсов, чтобы они могли воздействовать на данные других пользователей.

Если у вас есть данные регистрации или аудита, вы знаете, какиепользователь (обычный или супер) действовал на данные.

0 голосов
/ 04 февраля 2011
[Authorize(Roles = "Admin")]
public ActionResult Impersonate(string username)
{
    FormsAuthentication.SignOut();
    var cookie = FormsAuthentication.GetAuthCookie(username, false);
    Response.AppendCookie(cookie);
    return RedirectToAction("index");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...