Система управления студенческой организацией с JWT аутентификацией, ролями и должностями.
macOS:
# Через Homebrew
brew install python@3.9
# Или через pyenv (рекомендуется)
brew install pyenv
pyenv install 3.9.6
pyenv global 3.9.6Windows:
- Скачайте установщик с https://www.python.org/downloads/
- Запустите установщик
- ✅ Отметьте галочку "Add Python to PATH"
- Нажмите "Install Now"
Linux (Ubuntu/Debian):
sudo apt update
sudo apt install python3 python3-pippython3 --version # Должно быть 3.9 или выше
pip3 --versionПерейдите в директорию проекта:
cd /path/to/legacy-back# Создание виртуального окружения
python3 -m venv venv
# Активация (macOS/Linux)
source venv/bin/activate
# Активация (Windows)
venv\Scripts\activatepip3 install -r requirements.txtУстанавливаются пакеты:
fastapi- веб-фреймворкuvicorn- ASGI серверsqlalchemy- ORM для работы с БДpydantic- валидация данныхpasslib[bcrypt]- хеширование паролейpython-jose[cryptography]- JWT токены
База данных создаётся автоматически при первом запуске приложения.
Для создания БД с начальными данными (должности, пользователи, категории, карточки):
python3 seed_db_v2.pyБудут созданы:
- 8 должностей (admin, председатель, секретарь, и т.д.)
- 9 пользователей с разными ролями
- 3 категории
- 7 карточек
uvicorn main:app --reload --host 0.0.0.0 --port 8000Параметры:
--reload- автоперезагрузка при изменении кода (для разработки)--host 0.0.0.0- доступ с любых сетевых интерфейсов--port 8000- порт
Откройте в браузере:
- API документация (Swagger UI): http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
- Корневой endpoint: http://127.0.0.1:8000/
curl -X POST "http://127.0.0.1:8000/api/login" \
-H "Content-Type: application/json" \
-d '{"login":"admin","password":"admin123"}'legacy-back/
├── main.py # FastAPI приложение с API endpoints
├── database.py # Конфигурация базы данных
├── models.py # SQLAlchemy модели (Position, User, Category, Card, Visits)
├── schemas.py # Pydantic схемы для валидации
├── requirements.txt # Python зависимости
├── seed_db_v2.py # Скрипт заполнения БД
└── README.md # Документация
pip3 install -r requirements.txtuvicorn main:app --reload --host 0.0.0.0 --port 8000После запуска откройте:
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
| GET | /api/positions |
Список всех должностей | Все авторизованные |
| POST | /api/positions |
Создание должности | can_manage_positions |
| GET | /api/positions/{id} |
Должность по ID | Все авторизованные |
| PUT | /api/positions/{id} |
Обновление должности | can_manage_positions |
| DELETE | /api/positions/{id} |
Удаление должности | can_manage_positions |
| Метод | Endpoint | Описание |
|---|---|---|
| POST | /api/login |
Вход пользователя (логин + пароль) |
| POST | /api/logout |
Выход пользователя |
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
| POST | /api/register |
Регистрация нового пользователя | can_register_users |
| GET | /api/users |
Список пользователей (с фильтрацией по отделу) | Все авторизованные |
| GET | /api/user/me |
Информация о текущем пользователе | Все авторизованные |
| PUT | /api/user/change |
Обновление данных другого пользователя | can_edit_any_user или руководитель отдела |
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
| POST | /api/categories |
Создание категории | can_edit_categories |
| GET | /api/categories |
Список всех категорий | Все авторизованные |
| GET | /api/categories/{id} |
Категория по ID | Все авторизованные |
| PUT | /api/categories/{id} |
Обновление категории | can_edit_categories |
| DELETE | /api/categories/{id} |
Удаление категории | can_delete_categories |
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
| POST | /api/cards |
Создание карточки | can_edit_cards |
| GET | /api/cards |
Список доступных карточек | Все авторизованные |
| GET | /api/cards/{id} |
Карточка по ID (с проверкой доступа) | Все авторизованные |
| PUT | /api/cards/{id} |
Обновление карточки | can_edit_cards |
| DELETE | /api/cards/{id} |
Удаление карточки | can_delete_cards |
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /api/visits/categories |
История посещений категорий |
| GET | /api/visits/cards |
История посещений карточек |
- id, name (уникальное название)
- hierarchy_level - уровень иерархии (1 = высший, 10 = низший)
- can_register_users - регистрация пользователей
- can_edit_categories - редактирование категорий
- can_delete_categories - удаление категорий
- can_edit_cards - редактирование карточек
- can_delete_cards - удаление карточек
- can_edit_any_user - редактирование любых пользователей
- can_manage_positions - управление должностями (создание/редактирование/удаление)
- created_at
- login, password_hash
- first_name, last_name, middle_name
- birth_date
- course, group
- position_id (ссылка на Position)
- department
- telegram
- is_active, is_deactivated
- last_login
- name, description
- created_at
- title, content (markdown)
- category_id
- access_positions, access_logins (для ограничения доступа)
- created_at
| Должность | can_manage_positions | can_register_users | can_edit_categories | can_delete_cards |
|---|---|---|---|---|
| admin | ✅ | ✅ | ✅ | ✅ |
| председатель | ✅ | ✅ | ✅ | ✅ |
| председатель студсовета | ✅ | ✅ | ✅ | ✅ |
| заместитель председателя | ✅ | ✅ | ✅ | ✅ |
| секретарь | ✅ | ✅ | ✅ | ✅ |
| руководитель отдела/направления | ❌ | ❌ | ❌ | ❌ |
| заместитель руководителя отдела | ❌ | ❌ | ❌ | ❌ |
| участник | ❌ | ❌ | ❌ | ❌ |
| Логин | Пароль | Должность | Отдел |
|---|---|---|---|
| admin | admin123 | admin | IT |
| predsedatel | pred123 | председатель | Руководство |
| zampred | zampred123 | заместитель председателя | Руководство |
| sekr | sekr123 | секретарь | Руководство |
| ruk_it | ruk123 | руководитель отдела/направления | IT |
| zamruk_it | zamruk123 | заместитель руководителя отдела | IT |
| user1 | user123 | участник | IT |
| user2 | user123 | участник | SMM |
| user3 | user123 | участник | Фандрайз |
- Фандрай
- IT
- SMM
- Тропа
- Капуста
- Положение
- Правила редактуры
curl -X POST "http://127.0.0.1:8000/api/login" \
-H "Content-Type: application/json" \
-d '{"login": "admin", "password": "admin123"}'curl "http://127.0.0.1:8000/api/positions" \
-H "Authorization: Bearer YOUR_TOKEN"curl -X POST "http://127.0.0.1:8000/api/positions" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "координатор",
"hierarchy_level": 4,
"can_register_users": true,
"can_edit_categories": true,
"can_delete_categories": false,
"can_edit_cards": true,
"can_delete_cards": false,
"can_manage_positions": false
}'curl "http://127.0.0.1:8000/api/users" \
-H "Authorization: Bearer YOUR_TOKEN"curl "http://127.0.0.1:8000/api/users?department=IT" \
-H "Authorization: Bearer YOUR_TOKEN"curl -X POST "http://127.0.0.1:8000/api/categories" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Документы", "description": "Официальные документы"}'SQLite база данных хранится в файле app.db и не пересоздается при каждом запуске.
Данные сохраняются между перезапусками приложения.
Для пересоздания БД с начальными данными:
rm app.db && python3 seed_db_v2.py- JWT токены живут 30 дней
- Пароли хешируются с помощью bcrypt
- Все endpoints кроме
/api/loginтребуют JWT токен в заголовкеAuthorization: Bearer <token> - Ролевой доступ реализован через таблицу должностей (Position)
- Управление должностями доступно только пользователям с
can_manage_positions=True - Пользователи не могут редактировать себя - для изменения своих данных обратитесь к администратору
Разрешённые origin для фронтенда:
http://localhost:5173http://127.0.0.1:5173http://localhost:3000http://127.0.0.1:3000
Для добавления нового origin измените allow_origins в main.py.