177 lines
7.1 KiB
Markdown
177 lines
7.1 KiB
Markdown
# ⛔ Роль "Забанен"
|
||
|
||
## Что добавлено
|
||
|
||
### Новая роль "Забанен" (banned)
|
||
Роль для блокировки пользователей, которые нарушили правила или должны быть временно/постоянно отстранены от использования панели.
|
||
|
||
## 🚫 Ограничения роли
|
||
|
||
### Полная блокировка доступа
|
||
Пользователи с ролью "Забанен" **не имеют доступа** ни к каким функциям панели:
|
||
|
||
- ❌ Создание серверов
|
||
- ❌ Управление серверами
|
||
- ❌ Просмотр консоли
|
||
- ❌ Менеджер файлов
|
||
- ❌ Создание тикетов
|
||
- ❌ Просмотр тикетов
|
||
- ❌ Личный кабинет
|
||
- ❌ Любые другие функции
|
||
|
||
### Что происходит при попытке входа
|
||
При попытке доступа к любому endpoint API пользователь получает ошибку:
|
||
```
|
||
403 Forbidden: "Ваш аккаунт заблокирован"
|
||
```
|
||
|
||
## 🎨 Визуальное отображение
|
||
|
||
### В списке пользователей (Users.jsx)
|
||
- 🔴 **Красная иконка** пользователя
|
||
- **Текст роли**: "Забанен"
|
||
- **Описание**: "⛔ Пользователь заблокирован и не имеет доступа к панели"
|
||
|
||
### В личном кабинете (Profile.jsx)
|
||
- 🔴 **Красный бейдж** с текстом "Забанен"
|
||
- **Описание**: "⛔ Аккаунт заблокирован, доступ запрещён"
|
||
|
||
### В header (App.jsx)
|
||
- **Бейдж**: "Забанен" (красный цвет)
|
||
|
||
## 🔧 Как использовать
|
||
|
||
### Заблокировать пользователя
|
||
1. Войдите как администратор (none / none)
|
||
2. Нажмите кнопку "Пользователи" в header
|
||
3. Найдите нужного пользователя
|
||
4. В выпадающем списке выберите "Забанен"
|
||
5. Роль изменится автоматически
|
||
|
||
### Разблокировать пользователя
|
||
1. Войдите как администратор
|
||
2. Нажмите кнопку "Пользователи"
|
||
3. Найдите заблокированного пользователя
|
||
4. В выпадающем списке выберите другую роль:
|
||
- "Пользователь" - обычный доступ
|
||
- "Тех. поддержка" - доступ к тикетам
|
||
- "Администратор" - полный доступ
|
||
|
||
## 📋 Технические детали
|
||
|
||
### Backend (main.py)
|
||
|
||
#### Проверка в get_current_user()
|
||
```python
|
||
# Проверка на бан
|
||
if user.get("role") == "banned":
|
||
raise HTTPException(status_code=403, detail="Ваш аккаунт заблокирован")
|
||
```
|
||
|
||
Эта проверка выполняется **перед каждым запросом** к API, что гарантирует полную блокировку доступа.
|
||
|
||
#### Обновление роли
|
||
```python
|
||
new_role = data.get("role")
|
||
if new_role not in ["admin", "user", "support", "banned"]:
|
||
raise HTTPException(400, "Неверная роль")
|
||
```
|
||
|
||
### Frontend
|
||
|
||
#### App.jsx
|
||
```javascript
|
||
const getRoleName = (role) => {
|
||
switch (role) {
|
||
case 'admin':
|
||
return 'Админ';
|
||
case 'support':
|
||
return 'Поддержка';
|
||
case 'banned':
|
||
return 'Забанен';
|
||
default:
|
||
return 'Пользователь';
|
||
}
|
||
};
|
||
```
|
||
|
||
#### Users.jsx
|
||
```javascript
|
||
<option value="banned">Забанен</option>
|
||
```
|
||
|
||
#### Profile.jsx
|
||
```javascript
|
||
case 'banned':
|
||
return 'bg-red-500/20 text-red-500 border-red-500/50';
|
||
```
|
||
|
||
## 🔐 Безопасность
|
||
|
||
### Защита на уровне API
|
||
- Проверка роли выполняется в функции `get_current_user()`
|
||
- Блокировка происходит **до** выполнения любого endpoint
|
||
- Невозможно обойти блокировку через API
|
||
|
||
### Защита на уровне UI
|
||
- Визуальное отображение статуса блокировки
|
||
- Красные индикаторы для предупреждения
|
||
- Понятные сообщения об ошибках
|
||
|
||
## ⚠️ Важные замечания
|
||
|
||
### Администраторы не могут быть заблокированы
|
||
Рекомендуется добавить проверку, чтобы администраторы не могли заблокировать сами себя или других администраторов.
|
||
|
||
### Логирование блокировок
|
||
Рекомендуется добавить логирование:
|
||
- Кто заблокировал пользователя
|
||
- Когда была выполнена блокировка
|
||
- Причина блокировки (опционально)
|
||
|
||
### Уведомления
|
||
Можно добавить:
|
||
- Email уведомление о блокировке
|
||
- Причину блокировки в профиле
|
||
- Дату окончания блокировки (для временных банов)
|
||
|
||
## 📊 Статистика
|
||
|
||
### Роли в системе
|
||
1. **Администратор** (admin) - полный доступ
|
||
2. **Тех. поддержка** (support) - доступ к тикетам
|
||
3. **Пользователь** (user) - доступ к своим серверам
|
||
4. **Забанен** (banned) - нет доступа ⛔
|
||
|
||
## ✅ Готово!
|
||
|
||
Роль "Забанен" полностью интегрирована в MC Panel. Администраторы могут блокировать пользователей, которые нарушают правила или должны быть отстранены от использования панели.
|
||
|
||
### Тестирование
|
||
|
||
1. **Создайте тестового пользователя**
|
||
- Зарегистрируйте нового пользователя
|
||
|
||
2. **Заблокируйте его**
|
||
- Войдите как админ
|
||
- Откройте "Пользователи"
|
||
- Измените роль на "Забанен"
|
||
|
||
3. **Попробуйте войти**
|
||
- Выйдите из админа
|
||
- Войдите как заблокированный пользователь
|
||
- Вы увидите ошибку "Ваш аккаунт заблокирован"
|
||
|
||
4. **Разблокируйте**
|
||
- Войдите как админ
|
||
- Измените роль обратно на "Пользователь"
|
||
|
||
## 🎯 Использование
|
||
|
||
Роль "Забанен" готова к использованию. Используйте её для:
|
||
- Блокировки нарушителей
|
||
- Временного отстранения пользователей
|
||
- Защиты панели от нежелательных действий
|
||
|
||
**Будьте осторожны с блокировками! 🚨**
|