Skip to content

Repository files navigation

Test Auth — JWT-аутентификация с RBAC (Django + Vue)

Django REST Framework бэкенд + Vue 3 SPA фронтенд. JWT-аутентификация с ротацией refresh-токенов и ролевая модель доступа (RBAC).

Docker (полный стек). Сделан также и frontend

Запуск всех сервисов (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

После запуска:

Live reload работает — изменения в test_auth/ перезагружают Django, изменения в frontend/src/ обновляют браузер через Vite HMR.

Для локальной разработки без Docker используйте раздел «Быстрый старт» выше.

Демо-пользователи

После миграций в базе доступны готовые аккаунты:

Email Пароль Роли Недвижимость
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 Роль по умолчанию. Управление собственными ресурсами.

Как работает доступ

  1. Аутентификация (401): Все защищённые эндпоинты требуют JWT access-токен в заголовке Authorization: Bearer. Запросы без валидного токена получают ответ 401 Unauthorized.

  2. Авторизация (403): Эндпоинты, требующие определённых ролей (например, админ API), проверяют роли пользователя. Без нужной роли — ответ 403 Forbidden.

  3. Ресурсы с привязкой к владельцу: Обычные пользователи видят только свои ресурсы (например, недвижимость). Администраторы видят все ресурсы.

  4. Роль по умолчанию: При регистрации пользователю автоматически назначается роль user.

Таблицы в БД

  • roles — определения ролей (name, codename, description).
  • user_roles — связь пользователей с ролями. Уникальное ограничение на пару (user, role).

API-эндпоинты

Аутентификация

Метод Эндпоинт Авторизация Описание
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>/ Да Мягкое удаление объекта

Админ API (требуется роль admin)

Метод Эндпоинт Авторизация Описание
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": {...}}

Команда seed_roles

# Создать только роли (если нужно повторно)
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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages