vikkyshostak
@vikkyshostak
< This head full of dreams.

Django. Как сделать мульти-логин нескольких пользовательских аккаунтов для кастомной админки?

Доброго времени года!

Столкнулся с не тривиальной проблемой... решение которой, как на зло, требуется аж сразу в нескольких проектах :( Итак, по-порядку. Есть Django 1.11.8 и Python 3.5.3. Личный кабинет пользователя и его логин/восстановление/etc. — вынесены в отдельное приложение (наследовался от модели AbstractUser). На сайте есть две роли для учётных записей: Manager и Client (ну и один супер-пользователь, конечно же).

Вся соль в том, что необходимо реализовать мульти-логин для пользователя с ролью Manager, чтобы он мог войти за любую учётку с ролью Client, при этом не выходя из своей. Обычный же пользователь (Client), входит в учётку, как обычно, и такого функционала не имеет.

Этот функционал есть во всех популярных почтовиках, типа Gmail, Яндекс.Почта, Почта@Mail.Ru и так далее. Вы нажимаете «Добавить пользователя/аккаунт», система предлагает ввести логин и пароль от аккаунта. Далее, в выпадающем меню, мы можем переключаться между этими почтовыми аккаунтами, не делая логаут из текущей. При этом, если сбросить все куки браузера — это автоматически выкинет нас из всех учёток.

Вот в этом как раз и вопрос: можно ли такое реализовать только возможностями, которая даёт Джанга из коробки (без дописывания пакетов и прочего)? Как вообще должен строится алгоритм для подобного функционала?

Я размышляю вот так:

1. Пользователь вошёл под учёткой с ролью Manager;
2. Где-то в UI он кликает на «Добавить аккаунт»;
3. Открывается форма входа (с полями: логин, пароль и «Запомнить на этом устройстве»);
4. Заполнил, отправил форму, вошёл в аккаунт Client;
5. Джанга заморозила его первую сессию (которая принадлежит Manager) и создала новую;
6. Если пользователь хочет вернуться в учётку Manager, то просто кликает на неё где-то в UI (как в Gmail и прочих);
7. Джанга делает такую же заморозку сессии (как в пункте 5), но для сессии Client и размораживает сессию для Manager.

То есть, своего рода, бесконечная сессия для неограниченного числа пользователей получается.

Буду рад толковым комментариям/советам и, возможно, юзкейсам.
Заранее спасибо!
  • Вопрос задан
  • 489 просмотров
Решения вопроса 1
maram4ik
@maram4ik
Python developer
Использую вот такое решение
Переключаешься между пользователями, и всегда можешь вернуться в свою сессию
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы