188 lines
8.9 KiB
Markdown
188 lines
8.9 KiB
Markdown
# 👁️ Просмотр профилей пользователей
|
||
|
||
## Что добавлено
|
||
|
||
### Возможность просмотра профилей для админов и тех. поддержки
|
||
Администраторы и сотрудники технической поддержки теперь могут просматривать личные кабинеты других пользователей, нажав на их логин в списке пользователей.
|
||
|
||
## 🎯 Как использовать
|
||
|
||
### Просмотр профиля пользователя
|
||
1. Войдите как администратор или тех. поддержка
|
||
2. Нажмите кнопку "Пользователи" в header
|
||
3. Найдите нужного пользователя в списке
|
||
4. **Нажмите на логин пользователя** (он теперь кликабельный и подсвечивается при наведении)
|
||
5. Откроется личный кабинет этого пользователя
|
||
|
||
### Что можно увидеть
|
||
- ✅ Имя пользователя
|
||
- ✅ Роль пользователя
|
||
- ✅ Статистику по серверам (всего, мои, доступные)
|
||
- ✅ Список серверов пользователя
|
||
- ✅ Статистику по тикетам (всего, по статусам)
|
||
|
||
### Что нельзя сделать
|
||
- ❌ Изменить имя пользователя (вкладка скрыта)
|
||
- ❌ Изменить пароль пользователя (вкладка скрыта)
|
||
- ❌ Редактировать профиль другого пользователя
|
||
|
||
## 🎨 Визуальные изменения
|
||
|
||
### В списке пользователей (Users.jsx)
|
||
- **Логин пользователя** теперь кликабельный
|
||
- При наведении логин подсвечивается синим цветом
|
||
- Курсор меняется на pointer (указатель)
|
||
- Подсказка "Просмотреть профиль" при наведении
|
||
|
||
### В личном кабинете (Profile.jsx)
|
||
- **Заголовок**: "Профиль пользователя: [username]" (вместо "Личный кабинет")
|
||
- **Подзаголовок**: "Просмотр профиля другого пользователя"
|
||
- **Вкладки**: скрыты вкладки "Имя пользователя" и "Пароль"
|
||
- **Только вкладка "Обзор"**: показывается статистика пользователя
|
||
|
||
## 📋 Технические детали
|
||
|
||
### Backend (main.py)
|
||
|
||
#### Новый endpoint
|
||
```python
|
||
@app.get("/api/profile/stats/{username}")
|
||
async def get_user_profile_stats(username: str, user: dict = Depends(get_current_user)):
|
||
"""Получить статистику профиля другого пользователя"""
|
||
# Проверка прав доступа
|
||
if user["role"] not in ["admin", "support"]:
|
||
raise HTTPException(403, "Недостаточно прав")
|
||
|
||
# Возвращает статистику указанного пользователя
|
||
```
|
||
|
||
#### Проверка прав
|
||
- Только администраторы и тех. поддержка могут просматривать чужие профили
|
||
- Обычные пользователи получат ошибку 403
|
||
|
||
### Frontend
|
||
|
||
#### App.jsx
|
||
```javascript
|
||
const [viewingUsername, setViewingUsername] = useState(null);
|
||
|
||
const handleViewProfile = (username) => {
|
||
setViewingUsername(username);
|
||
setShowProfile(true);
|
||
setShowUsers(false);
|
||
};
|
||
```
|
||
|
||
#### Users.jsx
|
||
```javascript
|
||
<button
|
||
onClick={() => onViewProfile && onViewProfile(user.username)}
|
||
className="text-lg font-semibold hover:text-blue-400 transition cursor-pointer"
|
||
title="Просмотреть профиль"
|
||
>
|
||
{user.username}
|
||
</button>
|
||
```
|
||
|
||
#### Profile.jsx
|
||
```javascript
|
||
const isViewingOther = viewingUsername && viewingUsername !== user?.username;
|
||
|
||
const loadStats = async () => {
|
||
const endpoint = isViewingOther
|
||
? `${API_URL}/api/profile/stats/${viewingUsername}`
|
||
: `${API_URL}/api/profile/stats`;
|
||
// ...
|
||
};
|
||
```
|
||
|
||
## 🔐 Безопасность
|
||
|
||
### Проверка прав на уровне API
|
||
- Endpoint `/api/profile/stats/{username}` проверяет роль пользователя
|
||
- Только `admin` и `support` могут получить доступ
|
||
- Обычные пользователи получат ошибку 403
|
||
|
||
### Защита на уровне UI
|
||
- Вкладки изменения имени и пароля скрыты при просмотре чужого профиля
|
||
- Невозможно редактировать данные другого пользователя
|
||
- Только просмотр статистики
|
||
|
||
## 📊 Доступные роли
|
||
|
||
### Кто может просматривать чужие профили
|
||
1. **Администратор** (admin) - ✅ Может просматривать все профили
|
||
2. **Тех. поддержка** (support) - ✅ Может просматривать все профили
|
||
3. **Пользователь** (user) - ❌ Не может просматривать чужие профили
|
||
4. **Забанен** (banned) - ❌ Не имеет доступа к панели
|
||
|
||
## ✅ Примеры использования
|
||
|
||
### Сценарий 1: Проверка активности пользователя
|
||
1. Админ хочет проверить, сколько серверов у пользователя
|
||
2. Открывает "Пользователи"
|
||
3. Нажимает на логин пользователя
|
||
4. Видит статистику: 3 сервера, 5 тикетов
|
||
|
||
### Сценарий 2: Помощь пользователю
|
||
1. Тех. поддержка получила тикет от пользователя
|
||
2. Хочет посмотреть его серверы для диагностики
|
||
3. Открывает "Пользователи"
|
||
4. Нажимает на логин пользователя
|
||
5. Видит список серверов и их названия
|
||
|
||
### Сценарий 3: Модерация
|
||
1. Админ хочет проверить активность пользователя перед баном
|
||
2. Открывает профиль пользователя
|
||
3. Видит статистику по тикетам и серверам
|
||
4. Принимает решение о блокировке
|
||
|
||
## 🎯 Возврат к списку пользователей
|
||
|
||
### Из профиля пользователя
|
||
1. Нажмите кнопку "Серверы" в header
|
||
2. Вы вернётесь к главной странице
|
||
3. Снова откройте "Пользователи" для просмотра других профилей
|
||
|
||
### Или откройте свой профиль
|
||
1. Нажмите кнопку "Личный кабинет" в header
|
||
2. Откроется ваш собственный профиль
|
||
3. Будут доступны все вкладки (Обзор, Имя пользователя, Пароль)
|
||
|
||
## ⚠️ Важные замечания
|
||
|
||
### Ограничения
|
||
- Нельзя редактировать чужие профили
|
||
- Нельзя изменить имя или пароль другого пользователя
|
||
- Только просмотр статистики
|
||
|
||
### Рекомендации
|
||
- Используйте эту функцию для помощи пользователям
|
||
- Не злоупотребляйте просмотром чужих профилей
|
||
- Соблюдайте конфиденциальность данных пользователей
|
||
|
||
## ✅ Готово!
|
||
|
||
Функция просмотра профилей пользователей полностью интегрирована в MC Panel. Администраторы и тех. поддержка могут легко просматривать информацию о пользователях для помощи и модерации.
|
||
|
||
### Тестирование
|
||
|
||
1. **Войдите как администратор**
|
||
- Логин: none
|
||
- Пароль: none
|
||
|
||
2. **Создайте тестового пользователя**
|
||
- Зарегистрируйте нового пользователя
|
||
- Создайте несколько серверов от его имени
|
||
|
||
3. **Просмотрите его профиль**
|
||
- Откройте "Пользователи"
|
||
- Нажмите на логин тестового пользователя
|
||
- Увидите его статистику
|
||
|
||
4. **Вернитесь к своему профилю**
|
||
- Нажмите "Личный кабинет"
|
||
- Откроется ваш профиль со всеми вкладками
|
||
|
||
**Удобного использования! 👁️**
|