Add Banned role

This commit is contained in:
2026-01-14 22:13:07 +06:00
parent 011996d78d
commit 1eaba59f0f
7 changed files with 249 additions and 9 deletions

176
BANNED_ROLE.md Normal file
View File

@@ -0,0 +1,176 @@
# ⛔ Роль "Забанен"
## Что добавлено
### Новая роль "Забанен" (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. **Разблокируйте**
- Войдите как админ
- Измените роль обратно на "Пользователь"
## 🎯 Использование
Роль "Забанен" готова к использованию. Используйте её для:
- Блокировки нарушителей
- Временного отстранения пользователей
- Защиты панели от нежелательных действий
**Будьте осторожны с блокировками! 🚨**