Это приложение реализует систему авторизации с ограничением количества активных сессий для каждого пользователя (максимум 1 активная сессия на пользователя).
- ✅ Авторизация пользователей
- ✅ Управление сессиями с автоматическим разрывом старых при входе
- ✅ Автоматическая деактивация предыдущих сессий при входе
- ✅ Отслеживание активности сессий
- ✅ Автоматическая очистка неактивных сессий (через 9 часов)
- ✅ Управление доступом к страницам на основе ролей
Приложение использует PostgreSQL с таблицами:
users- пользователиproducts- продукты/страницыproduct_users- права доступа пользователей к продуктамproduct_owners- владельцы продуктовuser_sessions- активные сессии пользователей
- Python 3.8+
- Docker и Docker Compose
- Git
-
Клонируйте репозиторий:
git clone <repository-url> cd aut_str
-
Запустите приложение одним из способов:
Способ 1 - Bash скрипт:
./run_app.sh
Способ 2 - Python скрипт:
python3 run_app.py
Способ 3 - Ручной запуск:
# Создайте виртуальное окружение python3 -m venv .venv source .venv/bin/activate # Linux/Mac # или .venv\Scripts\activate # Windows # Установите зависимости pip install -r requirements.txt # Запустите PostgreSQL docker-compose up -d postgres # Запустите приложение streamlit run test.py
-
Откройте браузер:
http://localhost:8501
- Ivan - имеет доступ к админке и главной странице
- Petr - имеет доступ только к главной странице
Настройки подключения к PostgreSQL находятся в config.yaml:
database:
url: postgresql://aut_str_user:aut_str_password@localhost:5432/aut_str_dbНастройки cookie для сессий:
cookie:
expiry_days: 0.001 # Очень короткий срок жизни cookie
key: superstrongkey
name: demo_cookie- При входе пользователя создается новая сессия
- Все предыдущие активные сессии для этого пользователя автоматически деактивируются
- Пользователь может войти в систему, даже если у него уже есть активная сессия (старая разорвется)
- Неактивные сессии автоматически удаляются через 9 часов
create_user_session()- создание новой сессииcheck_user_active_sessions()- проверка количества активных сессийdeactivate_user_session()- деактивация сессииupdate_session_activity()- обновление времени активностиcleanup_inactive_sessions()- очистка неактивных сессий
aut_str/
├── app_pages/ # Страницы приложения
├── project/ # Дополнительные модули
├── task_kb/ # База знаний задач
├── models.py # Модели базы данных и функции
├── test.py # Основное приложение Streamlit
├── utils.py # Утилиты
├── config.yaml # Конфигурация
├── database.env # Переменные окружения БД
├── docker-compose.yml # Docker конфигурация
├── init.sql # Инициализация БД
├── requirements.txt # Python зависимости
├── run_app.sh # Bash скрипт запуска
├── run_app.py # Python скрипт запуска
└── README.md # Документация
- Создайте функцию в
app_pages/ - Добавьте продукт в базу данных
- Настройте права доступа в
product_users
Измените время в models.py:
# В функции cleanup_inactive_sessions измените интервал
UserSession.last_activity < func.current_timestamp() - func.interval('9 hours')# Проверьте статус контейнера
docker ps | grep postgres
# Перезапустите контейнер
docker-compose restart postgres# Пересоздайте виртуальное окружение
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt# Очистите все сессии вручную
docker exec -it aut_str_postgres psql -U aut_str_user -d aut_str_db -c "DELETE FROM user_sessions;"MIT License