Django REST Framework бэкенд + Vue 3 SPA фронтенд. JWT-аутентификация с ротацией refresh-токенов и ролевая модель доступа (RBAC).
Запуск всех сервисов (PostgreSQL, Redis, Django, Vue) одной командой:
docker-compose up --build# 1. Поднять инфраструктуру (PostgreSQL + Redis)
docker-compose up -d
# 2. Применить миграции (роли и демо-данные создаются автоматически)
cd test_auth && python manage.py migrate
# 3. Запустить Django-сервер
cd test_auth && python manage.py runserver 0.0.0.0:8000
# 4. Запустить Vue dev-сервер (в отдельном терминале)
cd frontend && npm run devПосле запуска:
- Frontend (Vue): http://localhost:5173
- Backend (Django): http://localhost:8000
Live reload работает — изменения в test_auth/ перезагружают Django, изменения в frontend/src/ обновляют браузер через Vite HMR.
Для локальной разработки без Docker используйте раздел «Быстрый старт» выше.
После миграций в базе доступны готовые аккаунты:
| Пароль | Роли | Недвижимость | |
|---|---|---|---|
admin@example.com |
admin123456 |
admin, user | 6 объектов |
ivan@example.com |
password123 |
user | 2 — квартира, дача |
maria@example.com |
password123 |
user, moderator | 3 — пентхаус, офис, участок |
alex@example.com |
password123 |
user | 0 — пустой аккаунт |
Система использует ролевую модель на основе БД. У пользователя может быть несколько ролей.
| Роль | Кодовое имя | Описание |
|---|---|---|
| Администратор | admin |
Полный доступ. Управление пользователями, ролями и всеми ресурсами. |
| Модератор | moderator |
Модерация контента. |
| Пользователь | user |
Роль по умолчанию. Управление собственными ресурсами. |
-
Аутентификация (401): Все защищённые эндпоинты требуют JWT access-токен в заголовке
Authorization: Bearer. Запросы без валидного токена получают ответ401 Unauthorized. -
Авторизация (403): Эндпоинты, требующие определённых ролей (например, админ API), проверяют роли пользователя. Без нужной роли — ответ
403 Forbidden. -
Ресурсы с привязкой к владельцу: Обычные пользователи видят только свои ресурсы (например, недвижимость). Администраторы видят все ресурсы.
-
Роль по умолчанию: При регистрации пользователю автоматически назначается роль
user.
roles— определения ролей (name,codename,description).user_roles— связь пользователей с ролями. Уникальное ограничение на пару(user, role).
| Метод | Эндпоинт | Авторизация | Описание |
|---|---|---|---|
| POST | /api/auth/register/ |
Нет | Регистрация (email, password, first_name, last_name) |
| POST | /api/auth/login/ |
Нет | Вход (возвращает access-токен + refresh в cookie) |
| POST | /api/auth/refresh/ |
Cookie | Ротация токенов |
| POST | /api/auth/logout/ |
Да | Завершение текущей сессии |
| Метод | Эндпоинт | Авторизация | Описание |
|---|---|---|---|
| GET | /api/users/me/ |
Да | Получить профиль (включая роли) |
| PATCH | /api/users/me/ |
Да | Обновить поля профиля |
| DELETE | /api/users/me/ |
Да | Мягкое удаление аккаунта |
| Метод | Эндпоинт | Авторизация | Описание |
|---|---|---|---|
| GET | /api/properties/ |
Да | Список объектов (свои; админ видит все) |
| POST | /api/properties/ |
Да | Создать объект |
| GET | /api/properties/<id>/ |
Да | Детали объекта |
| PATCH | /api/properties/<id>/ |
Да | Обновить объект |
| DELETE | /api/properties/<id>/ |
Да | Мягкое удаление объекта |
| Метод | Эндпоинт | Авторизация | Описание |
|---|---|---|---|
| GET | /api/admin/roles/ |
Admin | Список всех ролей |
| POST | /api/admin/roles/ |
Admin | Создать новую роль |
| GET | /api/admin/users/ |
Admin | Список пользователей с ролями (пагинация) |
| PATCH | /api/admin/users/<id>/roles/ |
Admin | Заменить роли пользователя |
Все эндпоинты возвращают стандартную обёртку:
// Успех
{"success": true, "message": "...", "data": {...}}
// Ошибка
{"success": false, "message": "...", "code": "error_code", "errors": {...}}# Создать только роли (если нужно повторно)
cd test_auth && python manage.py seed_roles
# Создать роли + админ-пользователя (пароль: admin123456)
cd test_auth && python manage.py seed_roles --create-admin admin@example.comКоманда идемпотентна — безопасно запускать повторно.
cd test_auth && python manage.py test