Skip to content

VladislavSerKir/django-jwt-auth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

📝 Notes Management API

RESTful API для управления заметками с JWT аутентификацией и ролевой системой.

🚀 Быстрый старт

Предварительные требования

  • Python 3.11+
  • Django 4.2+
  • SQLite (по умолчанию) или PostgreSQL

🔐 JWT Аутентификация и управление токенами

Система использует JSON Web Tokens (JWT) для безопасной аутентификации пользователей. JWT - это токены, которые содержат информацию о пользователе и подписываются сервером для защиты от подделки.

📋 Типы токенов:

  • Access Token - короткоживущий токен для доступа к API
  • Refresh Token - долгоживущий токен для обновления access токена

Роли и разрешения

В проекте реализован декоратор require_roles() для проверки прав доступа. Проверяет, имеет ли пользователь необходимые роли для доступа к конкретному endpoint'у. Или если нужна тонкая настройка доступа, используется ручная проверка ролей в бизнес-логике.

📊 Доступные роли:

class Role(IntEnum):
    ADMIN = 0    # Администратор - полный доступ, за исключением просмотра заметок других пользователей по ID
    USER = 1     # Пользователь - ограниченный доступ, можно создавать / смотреть / редактировать / удалять свои заметки. А так же управлять свом профилем, за исключением установки роли. При удалении учетной записи пользователь становится неактивным 


┌─────────────────────────────────────────────────────────────┐
│                    Запрос пользователя                      │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│               1. JWT Аутентификация                         │
│   Проверка access token через CustomJWTAuthentication       │
│   • Возвращает 401 если пользователь не аутентифицирован    │
│   • Устанавливает request.user при успешной аутентификации  │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│               2. Декоратор require_roles()                  │
│   • Извлекает роль пользователя из request.user.role        │
│   • Проверяет required_roles декоратора                     │
│   • Сравнивает с role пользователя                          │
│   • Возвращает 403 если роль не совпадает                   │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│                    3. Выполнение View                       │
│   Доступ разрешен - выполняется бизнес-логика               │
└─────────────────────────────────────────────────────────────┘

🗄️ Модели приложения

1. Пользователь (User)

Модель: apps.users.models.User Таблица: users Описание: Кастомная модель пользователя с поддержкой ролей и JWT аутентификации.

Поля:

  • id - уникальный идентификатор
  • name - полное имя пользователя
  • email - email (уникальный, используется для входа)
  • password - хешированный пароль (bcrypt)
  • role - роль пользователя (0=ADMIN, 1=USER)
  • is_active - активен ли аккаунт
  • created_at, updated_at - временные метки

Связанные модели:

  • Один-ко-многим с Note (у пользователя много заметок)

2. Заметка (Note)

Модель: apps.notes.models.Note Таблица: notes Описание: Основная сущность приложения - заметки пользователей.

Поля:

  • id - уникальный идентификатор
  • name - название заметки
  • description - содержание заметки
  • user - внешний ключ к User (владелец заметки)
  • created_at, updated_at - временные метки

Связанные модели:

  • Многие-к-одному с User (принадлежит одному пользователю)

Установка

  1. Клонируйте репозиторий
git clone <repository-url>
cd <project-directory>
  1. Установить проект командой setup.sh (с выдачей прав)
chmod +x setup.sh
./setup.sh
  1. Альтернативный путь установить вручную

3.1. Установите зависимости с помощью Pipenv

pipenv install --dev

3.2. Примените миграции базы данных

pipenv run python manage.py migrate

3.3. Создайте тестовых пользователей и заметки с помощью команды python

pipenv run python manage.py create_test_data

3.4. Активируйте, виртуальное окружение и запустите сервер разработки

pipenv shell
pipenv run python manage.py runserver

3.5. Создание супер пользователя в Django admin (если необходимо)

pipenv run python manage.py createsuperuser

Для тестирования API можно импортировать файл postman_collection.json в Postman

About

📝 Notes Management API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published