Пользователи и роли
Роли
| Роль | Описание |
|---|---|
USER | Зарегистрированный покупатель. Каталог, оформление заказов, личный кабинет |
EDITOR | Контент-редактор. Баннеры, преимущества, отзывы, медиатека, категории (чтение/настройка) |
MANAGER | Менеджер. Всё, что у EDITOR + заказы и заявки с сайта |
ADMIN | Полный доступ ко всем разделам, включая товары, пользователей и настройки |
SUPER_ADMIN | Расширенный администратор. Дополнительно — управление прайсами и пополнениями лицензии |
Точные правила доступа по эндпоинтам — в разделе Безопасность.
Регистрация и вход
Регистрация доступна через /api/v1/auth/register (публичный эндпоинт). Новый пользователь получает роль USER.
POST /api/v1/auth/register
Body: { name, email, password }
→ Возвращает JWT-токен сразу после регистрации
POST /api/v1/auth/login
Body: { email, password }
→ Возвращает JWT-токен
Токен действует 24 часа. Хранится в localStorage под ключом dm_shop_token.
Управление профилем
Пользователь может самостоятельно:
PUT /api/v1/auth/profile
Body: { name, phone }
PUT /api/v1/auth/change-password
Body: { currentPassword, newPassword }
Управление пользователями в Админ-панели
Страница /admin/users — список всех пользователей.
Страница /admin/users/{id} — редактирование пользователя.
Создание пользователя (ADMIN)
POST /api/v1/admin/users
Body: { name, email, password, role, phone }
Изменение роли
PUT /api/v1/admin/users/{id}
Body: { name, email, role, phone }
Удаление пользователя
DELETE /api/v1/admin/users/{id}
История заказов пользователя
GET /api/v1/admin/users/{id}/orders
Обращения клиентов (Contact Requests)
Форма обратной связи доступна без авторизации:
POST /api/v1/contacts
Body: { name, phone, email, message }
Защита от спама через SpamProtectionService — ограничение количества обращений с одного IP.
Обработка обращений
Страница /admin/contacts:
| Статус | Описание |
|---|---|
NEW | Новое, не прочитанное |
READ | Прочитано менеджером |
IN_PROGRESS | В работе |
CLOSED | Закрыто (вопрос решён) |
PUT /api/v1/admin/contacts/{id}/status
Body: { "status": "IN_PROGRESS" }
PUT /api/v1/admin/contacts/{id}/notes
Body: { "notes": "Позвонили, ответ дан" }
Защита от спама (SpamProtectionService) ограничивает число обращений с одного IP/телефона; устаревшие записи счётчика очищаются раз в час.
Хранение паролей
Пароли хранятся только в виде BCrypt-хешей — исходный пароль восстановить невозможно. При «сбросе» пароля администратор устанавливает новый пароль, который будет захеширован при сохранении.