Как создать «черный ход» для администратора, чтобы иметь возможность войти в систему как другой пользователь и увидеть информацию? - PullRequest
0 голосов
/ 24 ноября 2011

Я создаю инструмент онлайн-опроса.

Как администратор, я хотел бы видеть ответы пользователей, а также иметь возможность отвечать от их имени. Система получает ответы пользователей и другую информацию, основанную на его / ее имени пользователя, при входе в систему с использованием встроенного поставщика членства.

В настоящее время есть три роли: администратор, модератор и ответчик

Если я хочу показать администратору список пользователей,

как можно создать «черный ход» для администратора, чтобы он мог «войти» как пользователь, увидеть ответы пользователей и т. Д.? (Точно так же, как пользователь сможет, если он вошел в свою учетную запись).

При ответе и получении ответов система привязывается к `User.Identity.Name


Мое предложение о том, как решить эту проблему:

В настоящее время, когда я хочу получить ответы пользователей, я использую следующий код:

Firma_ID = db.Firma.Single(x => x.CVR_nummer == User.Identity.Name).firma_id;
var answers = db.Tabelform_Answers.Where(x => x.question_id == model.Question_ID && x.respondent == Firma_ID);

Это потому, что у меня есть таблица с именем Firma, в которой есть столбец, ссылающийся на имя пользователя с именем CVR_Nummer. Затем я получаю все записи в таблице Tabelform_Answers, которые соответствуют question_id и Firma_ID (пользователи отвечают на конкретный вопрос).

Вместо использования `Firma_ID = db.Firma.Single (x => x.CVR_nummer == User.Identity.Name) .firma_id;

чтобы получить Firma_ID данного пользователя, я мог бы сохранить его в сеансе при входе в систему. Когда я хочу просмотреть ответы определенных пользователей от имени администратора, я бы просто изменил Firma_ID в сеансе. Изменение Firma_ID в сеансе будет разрешено только через контроллер, имеющий следующий код:

[Authorize(Roles = "Administrator")]

Кроме того, я бы установил время ожидания сеанса таким же, как и время аутентификации.

Может кто-нибудь сказать мне, какие плюсы и минусы этого решения? Существуют ли другие способы хранения «глобальной» переменной для сеанса? (Firma_ID)

Спасибо

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Если вам нужно только войти в систему как ваши пользователи, я выбрал тикет-метод.У меня есть специальная страница входа в систему, которая может принять идентификатор билета.Этот тикет создается в административном интерфейсе, когда администратор хочет войти в систему как другой пользователь.Страница входа проверяет заявку в базе данных, регистрирует требуемого пользователя, а затем удаляет / помечает заявку как использованную.В качестве дополнительной защиты билет действителен только в течение 10 секунд после создания.

Другой вариант - сделать ответы пользователей доступными из admin-gui ...

0 голосов
/ 27 ноября 2011

также вы можете сделать в вашем логине скрипт переопределения

так что у вас есть что-то вроде

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

вместо этого есть страница администратора, где вы можете выбрать пользователя, а затем вы можете применить права пользователя вместо администратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...