Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Расширенное задание: RESTful API для управления пользователями с аутентификацией и авторизацией

1. Описание задачи

Разработай RESTful API на Go для управления пользователями, реализовав следующие возможности:

  • CRUD операции для пользователей:

    • GET /users – получение списка всех пользователей (только для авторизованных администраторов).
    • GET /users/{id} – получение данных конкретного пользователя (доступно пользователю, которому принадлежат данные, или администратору).
    • POST /users – регистрация нового пользователя.
    • PUT /users/{id} – обновление данных существующего пользователя.
    • DELETE /users/{id} – удаление пользователя.
  • Аутентификация:

    • POST /auth/login – вход пользователя в систему. Клиент отправляет учетные данные (например, email и пароль), сервер проверяет их и возвращает токен (например, JWT).
    • POST /auth/logout (опционально) – выход пользователя (если реализуете механизм «черного списка» или инвалидирования токенов).
  • Авторизация:

    • Реализуй проверку доступа для защищенных эндпоинтов.
    • Например, эндпоинт GET /users доступен только администраторам, а GET /users/{id} доступен либо владельцу, либо администратору.
    • Для хранения ролей пользователей можно добавить поле role (например, "admin" или "user") в модель пользователя.
  • Безопасное хранение паролей:

    • Храни пароли в виде хэшированных значений (используй bcrypt или аналогичную библиотеку).

2. Функциональные и технические требования

Маршрутизация и обработка запросов

  • Используй популярный роутер (например, Gin, Echo или Gorilla Mux).
  • Реализуй обработчики для каждого эндпоинта, возвращающие корректные HTTP-статусы и JSON-ответы.

Аутентификация и авторизация

  • Реализуй механизм аутентификации с помощью JWT:
    • При успешном входе (POST /auth/login) сервер генерирует JWT-токен с полезной нагрузкой (например, id пользователя, роль, время жизни токена).
    • Защищенные эндпоинты проверяют наличие и валидность JWT в заголовке Authorization.
  • Создай middleware, который:
    • Проверяет наличие токена.
    • Декодирует и валидирует JWT.
    • Извлекает информацию о пользователе и добавляет её в контекст запроса.
    • На основании ролей (например, admin/user) разрешает или запрещает доступ к определённым ресурсам.

Логирование

  • Внедри логирование входящих запросов, ответов и ошибок (с использованием zap или logrus).
  • Реализуй middleware для логирования, чтобы логировались метод, URL, статус и время выполнения.

Обработка ошибок

  • Создай централизованную обработку ошибок:
    • Определи общий формат ответа с ошибкой (например, JSON с полями error и message).
    • Обрабатывай ошибки в middleware или через общий механизм обработки в каждом обработчике.

Конфигурация

  • Читай настройки из переменных окружения или конфигурационного файла (с использованием viper).
  • Настрой параметры для режима разработки и production (например, порт сервера, секрет для JWT, режим логирования).

Документация API

  • Опиши эндпоинты, их параметры, пример запросов и ответов в README.
  • (Опционально) сгенерируй документацию через Swagger/OpenAPI.

Контейнеризация

  • Подготовь Dockerfile для сборки и запуска приложения.
  • Если используешь внешнюю базу данных, подготовь docker-compose.yml, включив сервисы для приложения, БД и nginx (если нужен reverse proxy и обслуживание статических файлов).

About

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

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages