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