412 lines
14 KiB
Markdown
412 lines
14 KiB
Markdown
# Управление пользователями (Админ-панель)
|
||
|
||
## Обзор
|
||
|
||
Добавлена полноценная система управления пользователями в админ-панели с возможностью просмотра статистики, фильтрации, редактирования, блокировки и удаления пользователей.
|
||
|
||
## Новые возможности
|
||
|
||
### 📊 Статистика пользователей
|
||
- **Всего пользователей** — общее количество зарегистрированных
|
||
- **Активных (сегодня)** — пользователи с входом сегодня
|
||
- **Заблокировано** — количество заблокированных аккаунтов
|
||
- **Админов** — количество администраторов
|
||
|
||
### 🔍 Фильтры
|
||
- **По роли**: Все / Админы / Пользователи
|
||
- **По статусу**: Все / Активные / Заблокированные
|
||
- **Поиск по логину**: Динамический поиск
|
||
|
||
### 📋 Таблица пользователей
|
||
|
||
Отображаемые данные:
|
||
- **Логин** — имя пользователя (с пометкой "Вы" для текущего)
|
||
- **Роль** — 👑 Админ или 👤 Пользователь
|
||
- **IP адрес** — последний известный IP
|
||
- **Последний вход** — относительное время ("2 ч назад", "Вчера")
|
||
- **Статус** — ✅ Активен или 🚫 Заблокирован
|
||
- **Действия** — кнопки управления
|
||
|
||
### ⚙️ Действия с пользователями
|
||
|
||
1. **✏️ Редактировать**
|
||
- Изменить роль (Админ/Пользователь)
|
||
- Изменить статус (Активен/Заблокирован)
|
||
- Сменить пароль (опционально)
|
||
|
||
2. **🚫/✅ Заблокировать/Разблокировать**
|
||
- Быстрая блокировка/разблокировка
|
||
- Заблокированные пользователи не могут войти
|
||
|
||
3. **🗑️ Удалить**
|
||
- Полное удаление пользователя
|
||
- Требует двойного подтверждения
|
||
- Нельзя удалить себя
|
||
|
||
## Использование
|
||
|
||
### Открыть вкладку "Пользователи"
|
||
|
||
1. Войдите как администратор (`admin` / `admin`)
|
||
2. Откройте **Админ-панель** (меню → ⚙️ Админ)
|
||
3. Выберите вкладку **👥 Пользователи**
|
||
|
||
### Просмотр и фильтрация
|
||
|
||
```
|
||
┌─────────────────────────────────────────────┐
|
||
│ [Все роли ▼] [Все статусы ▼] [🔍 Поиск...] │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
- Выберите фильтры в выпадающих списках
|
||
- Введите текст в поле поиска для фильтрации по логину
|
||
- Результаты обновляются автоматически
|
||
|
||
### Редактирование пользователя
|
||
|
||
1. Нажмите **✏️** напротив пользователя
|
||
2. Откроется модальное окно:
|
||
```
|
||
┌─────────────────────────────────┐
|
||
│ ✏️ Редактирование пользователя │
|
||
├─────────────────────────────────┤
|
||
│ Логин: [username] (readonly) │
|
||
│ Роль: [Пользователь ▼] │
|
||
│ Статус: [Активен ▼] │
|
||
│ Новый пароль: [________] │
|
||
│ │
|
||
│ [💾 Сохранить] [❌ Отмена] │
|
||
└─────────────────────────────────┘
|
||
```
|
||
3. Внесите изменения
|
||
4. Нажмите **💾 Сохранить**
|
||
|
||
### Блокировка пользователя
|
||
|
||
**Быстрая блокировка:**
|
||
- Нажмите **🚫** напротив пользователя
|
||
- Подтвердите действие
|
||
- Пользователь заблокирован
|
||
|
||
**Эффект:**
|
||
- Пользователь не сможет войти в систему
|
||
- При попытке входа: "Ваш аккаунт заблокирован"
|
||
- Статус в таблице: 🚫 Заблокирован
|
||
|
||
**Разблокировка:**
|
||
- Нажмите **✅** напротив заблокированного пользователя
|
||
- Подтвердите действие
|
||
|
||
### Удаление пользователя
|
||
|
||
⚠️ **ВНИМАНИЕ: Действие необратимо!**
|
||
|
||
1. Нажмите **🗑️** напротив пользователя
|
||
2. Подтвердите удаление (1-е окно)
|
||
3. Подтвердите ещё раз (2-е окно для безопасности)
|
||
4. Пользователь удалён полностью
|
||
|
||
**Что удаляется:**
|
||
- Запись пользователя из БД
|
||
- Настройки пользователя
|
||
- История игр сохраняется для статистики
|
||
|
||
**Ограничения:**
|
||
- Нельзя удалить себя
|
||
- Нельзя удалить единственного админа (рекомендуется)
|
||
|
||
## API Endpoints
|
||
|
||
### POST `/api/admin/users`
|
||
|
||
Получить список пользователей с фильтрами.
|
||
|
||
**Headers:**
|
||
```
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
```
|
||
|
||
**Body:**
|
||
```json
|
||
{
|
||
"role": "admin|user|",
|
||
"status": "active|banned|",
|
||
"search": "логин для поиска"
|
||
}
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"users": [
|
||
{
|
||
"id": "uuid",
|
||
"username": "admin",
|
||
"role": "admin",
|
||
"banned": 0,
|
||
"ipAddress": "127.0.0.1",
|
||
"lastLogin": "2026-02-01T12:00:00Z",
|
||
"createdAt": "2026-01-01T00:00:00Z",
|
||
"totalGames": 42,
|
||
"totalWins": 18,
|
||
"totalChipsWon": 15000
|
||
}
|
||
],
|
||
"stats": {
|
||
"total": 10,
|
||
"active": 3,
|
||
"banned": 1,
|
||
"admins": 2
|
||
}
|
||
}
|
||
```
|
||
|
||
### POST `/api/admin/user/update`
|
||
|
||
Обновить данные пользователя.
|
||
|
||
**Body:**
|
||
```json
|
||
{
|
||
"username": "user123",
|
||
"role": "admin",
|
||
"banned": false,
|
||
"password": "новый_пароль" // опционально
|
||
}
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"success": true
|
||
}
|
||
```
|
||
|
||
### POST `/api/admin/user/ban`
|
||
|
||
Заблокировать/разблокировать пользователя.
|
||
|
||
**Body:**
|
||
```json
|
||
{
|
||
"username": "user123",
|
||
"banned": true
|
||
}
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"success": true
|
||
}
|
||
```
|
||
|
||
### POST `/api/admin/user/delete`
|
||
|
||
Удалить пользователя.
|
||
|
||
**Body:**
|
||
```json
|
||
{
|
||
"username": "user123"
|
||
}
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"success": true
|
||
}
|
||
```
|
||
|
||
**Errors:**
|
||
- `403` — Нельзя удалить себя
|
||
- `404` — Пользователь не найден
|
||
- `500` — Ошибка сервера
|
||
|
||
## База данных
|
||
|
||
### Новые поля в таблице `users`
|
||
|
||
```sql
|
||
ALTER TABLE users ADD COLUMN banned INTEGER DEFAULT 0;
|
||
ALTER TABLE users ADD COLUMN ip_address TEXT;
|
||
```
|
||
|
||
**Описание:**
|
||
- `banned` — флаг блокировки (0 = активен, 1 = заблокирован)
|
||
- `ip_address` — последний известный IP адрес пользователя
|
||
|
||
### Миграция
|
||
|
||
Поля добавляются автоматически при запуске сервера, если их нет:
|
||
|
||
```
|
||
✅ Добавлено поле banned в таблицу users
|
||
✅ Добавлено поле ip_address в таблицу users
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
### Проверки на сервере
|
||
|
||
1. **Авторизация**: Только админы имеют доступ к API
|
||
2. **Валидация**: Проверка наличия обязательных полей
|
||
3. **Защита от самоблокировки**: Нельзя заблокировать/удалить себя
|
||
4. **Проверка при входе**: Блокированные пользователи не могут войти
|
||
|
||
### Логирование
|
||
|
||
Все административные действия логируются:
|
||
|
||
```javascript
|
||
database.logAction(adminId, adminUsername, 'update_user', {
|
||
target: 'user123',
|
||
changes: { role: 'admin', banned: true }
|
||
});
|
||
```
|
||
|
||
**Типы действий:**
|
||
- `view_users` — просмотр списка пользователей
|
||
- `update_user` — изменение данных пользователя
|
||
- `ban_user` — блокировка пользователя
|
||
- `unban_user` — разблокировка пользователя
|
||
- `delete_user` — удаление пользователя
|
||
|
||
## Интерфейс
|
||
|
||
### Цветовая индикация
|
||
|
||
**Роли:**
|
||
- 👑 **Админ** — фиолетовый градиент
|
||
- 👤 **Пользователь** — серый фон
|
||
|
||
**Статусы:**
|
||
- ✅ **Активен** — зелёный фон
|
||
- 🚫 **Заблокирован** — красный фон
|
||
|
||
### Адаптивность
|
||
|
||
- **Desktop (>1024px)**: Полная таблица
|
||
- **Tablet (768-1024px)**: Компактные столбцы
|
||
- **Mobile (<768px)**: Горизонтальная прокрутка таблицы
|
||
|
||
### Анимации
|
||
|
||
- Плавное появление вкладки (fadeInUp 0.3s)
|
||
- Hover эффекты на строках таблицы
|
||
- Увеличение кнопок при наведении (scale 1.1)
|
||
|
||
## Примеры использования
|
||
|
||
### Создать нового админа
|
||
|
||
1. Зарегистрируйте пользователя обычным способом
|
||
2. Войдите как админ
|
||
3. Откройте вкладку **👥 Пользователи**
|
||
4. Найдите нужного пользователя
|
||
5. Нажмите **✏️ Редактировать**
|
||
6. Измените роль на **👑 Администратор**
|
||
7. Сохраните
|
||
|
||
### Заблокировать спамера
|
||
|
||
1. Откройте вкладку **👥 Пользователи**
|
||
2. Найдите спамера в списке или через поиск
|
||
3. Нажмите **🚫 Заблокировать**
|
||
4. Подтвердите действие
|
||
5. Пользователь заблокирован
|
||
|
||
### Посмотреть активных сегодня
|
||
|
||
1. Откройте вкладку **👥 Пользователи**
|
||
2. В верхней панели статистики смотрите "Активных (сегодня)"
|
||
3. Или используйте фильтр и отсортируйте по "Последний вход"
|
||
|
||
### Сбросить пароль пользователю
|
||
|
||
1. Откройте вкладку **👥 Пользователи**
|
||
2. Найдите пользователя
|
||
3. Нажмите **✏️ Редактировать**
|
||
4. Введите новый пароль в поле "Новый пароль"
|
||
5. Нажмите **💾 Сохранить**
|
||
6. Сообщите пользователю новый пароль
|
||
|
||
## Ограничения и рекомендации
|
||
|
||
### Ограничения
|
||
|
||
- ❌ Нельзя редактировать/удалять себя
|
||
- ❌ Нельзя заблокировать себя
|
||
- ❌ Удаление необратимо (нет корзины)
|
||
|
||
### Рекомендации
|
||
|
||
- ✅ Всегда имейте минимум 2 админов
|
||
- ✅ Используйте блокировку вместо удаления (можно отменить)
|
||
- ✅ Регулярно проверяйте список активных пользователей
|
||
- ✅ Следите за IP адресами для выявления дубликатов
|
||
- ✅ Логируйте важные действия через вкладку "📋 Логи"
|
||
|
||
## Отладка
|
||
|
||
### Проверка прав доступа
|
||
|
||
```javascript
|
||
// В консоли браузера
|
||
console.log(currentUser?.role); // Должно быть "admin"
|
||
```
|
||
|
||
### Проверка токена
|
||
|
||
```javascript
|
||
// В консоли браузера
|
||
console.log(localStorage.getItem('token'));
|
||
```
|
||
|
||
### Проверка API
|
||
|
||
```bash
|
||
# Получить список пользователей
|
||
curl -X POST http://localhost:3000/api/admin/users \
|
||
-H "Authorization: Bearer <token>" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"role":"","status":"","search":""}'
|
||
```
|
||
|
||
### Логи действий
|
||
|
||
Все административные действия записываются в таблицу `action_logs`:
|
||
|
||
```sql
|
||
SELECT * FROM action_logs
|
||
WHERE action_type IN ('update_user', 'ban_user', 'delete_user')
|
||
ORDER BY timestamp DESC
|
||
LIMIT 20;
|
||
```
|
||
|
||
## Обновления
|
||
|
||
**Версия 1.0** (2026-02-01)
|
||
- ✅ Базовое управление пользователями
|
||
- ✅ Фильтры и поиск
|
||
- ✅ Редактирование, блокировка, удаление
|
||
- ✅ Статистика пользователей
|
||
- ✅ Отслеживание IP адресов
|
||
- ✅ Проверка блокировки при входе
|
||
|
||
**Планируется:**
|
||
- 📋 Экспорт списка пользователей в CSV
|
||
- 📊 Расширенная статистика по пользователям
|
||
- 🔍 Фильтр по дате регистрации
|
||
- 📧 Отправка уведомлений пользователям
|
||
- 🔐 Двухфакторная аутентификация для админов
|
||
|
||
---
|
||
|
||
**Документация актуальна для версии**: 1.0
|
||
**Дата**: 2026-02-01
|
||
**Автор**: GitHub Copilot
|