Some checks failed
continuous-integration/drone/pr Build is failing
- Implemented two-level admin hierarchy (super admin from .env and assigned admins) - Only super admins (from ADMIN_IDS in .env) can manage admin assignments - Added admin management menu to settings (visible only for super admins) - Admins can add/remove other admins through the bot interface - Protected super admins from deletion - Added CLI tool for admin management (scripts/manage_admins.py) - Added database check script (scripts/check_db.py) - Added deployment scripts for server setup - Added comprehensive documentation on admin management system - Added backup and server deployment guides
9.6 KiB
9.6 KiB
Система управления администраторами
Описание
Реализована двухуровневая система управления правами администраторов:
-
Главные администраторы (Super Admin) - указаны в переменной
ADMIN_IDSв.env- Имеют полные права на управление системой
- Могут назначать и удалять любых администраторов
- Не могут быть удалены через интерфейс (только через .env)
-
Назначенные администраторы - добавлены через админ-панель
- Имеют права администратора в боте
- Не могут управлять другими администраторами
- Могут быть удалены главными администраторами
Как это работает
Иерархия прав
Главный администратор (.env)
├─ Может управлять админами (добавлять/удалять)
├─ Может управлять розыгрышами
├─ Может управлять пользователями
└─ Полный доступ ко всем функциям
Назначенный администратор
├─ НЕ может управлять администраторами
├─ Может управлять розыгрышами
├─ Может управлять пользователями
└─ Имеет стандартные права админа
Проверочные механизмы
- Функция
is_super_admin(user_id)- проверяет, является ли пользователь главным администратором - Функция
is_admin(user_id)- проверяет, является ли пользователь администратором (любого уровня) - Все операции с администраторами доступны ТОЛЬКО главным администраторам
Доступ в админ-панели
Путь к управлению администраторами:
Админ-панель → ⚙️ Настройки → 👑 Управление админами (опция видна ТОЛЬКО для главных администраторов)
Меню управления администраторами:
-
➕ Назначить админа
- Поиск пользователя по Telegram ID или имени
- Проверка, что пользователь
- Существует в системе
- Не является главным администратором (.env)
- Еще не является администратором
- Подтверждение перед назначением
-
➖ Удалить админа
- Показывает список только назначенных администраторов
- Главные администраторы (.env) не отображаются и не могут быть удалены
- Подтверждение перед удалением
-
📋 Список админов
- Показывает двухцветный список:
- 🔴 Главные администраторы (.env) - красные маркеры
- 🟠 Назначенные администраторы - оранжевые маркеры
- Для каждого администратора показывается:
- Имя (если указано)
- Username (если есть)
- Telegram ID
- Показывает двухцветный список:
Изменение в основной панели
В основной административной панели добавлена кнопка 👑 Управление админами (видна только для главных администраторов).
Технические детали
Состояния (States)
admin_management_action # Выбор действия
admin_add_search # Поиск пользователя для назначения
admin_add_confirm # Подтверждение назначения
admin_remove_select # Выбор админа для удаления
admin_remove_confirm # Подтверждение удаления
Обработчики
manage_admins_menu()- главное меню управления админамиlist_admins_view()- показать список всех администраторовadd_admin_start()- начать процесс добавления админаsearch_user_for_admin()- поиск и подтверждение пользователяconfirm_add_admin()- финальное назначение прав админаremove_admin_start()- начать процесс удаления админаconfirm_remove_admin()- финальное удаление прав админа
Данные в БД
В таблице users используется поле:
is_admin(Boolean, default=False) - флаг, указывающий на то, что пользователь является администратором
Примеры использования
Пример 1: Назначить админа
- Главный администратор открывает Админ-панель
- Нажимает на ⚙️ Настройки
- Нажимает на 👑 Управление админами (доступно только для главных администраторов)
- Нажимает на ➕ Назначить админа
- Вводит Telegram ID пользователя (например,
123456789) или имя - Система показывает информацию о пользователе
- Подтверждает назначение кнопкой ✅ Да, назначить
- Пользователь получает права администратора
Пример 2: Удалить права админа
- Главный администратор открывает Админ-панель
- Нажимает на ⚙️ Настройки
- Нажимает на 👑 Управление админами
- Нажимает на ➖ Удалить админа
- Выбирает администратора из списка назначенных админов
- Система запрашивает подтверждение
- После подтверждения администратор теряет права
Пример 3: Просмотра списка администраторов
- Главный администратор открывает Админ-панель
- Нажимает на ⚙️ Настройки
- Нажимает на 👑 Управление админами
- Нажимает на 📋 Список админов
- Видит:
- Главные администраторы из .env (🔴 красные)
- Назначенные администраторы (🟠 оранжевые)
Безопасность
-
Защита главных администраторов
- Главные администраторы из .env не могут быть удалены через интерфейс
- Для изменения главного администратора нужно отредактировать
.env
-
Ограничение прав
- Только главные администраторы могут управлять правами
- Назначенные администраторы полностью исключены из управления
-
Подтверждение критических операций
- Все операции с администраторами требуют явного подтверждения
- Система показывает полную информацию перед назначением/удалением
-
Логирование
- Все операции логируются в системный лог (можно добавить)
Возможные расширения
- Роли администраторов - разделить права на группы (модератор, аналитик и т.д.)
- История действий - отслеживать, кто и когда менял права
- Уведомления - отправлять уведомления при назначении/удалении администратора
- Экспорт списка админов - возможность скачать список всех администраторов
Обновления код еще раз
В коде реализованы следующие проверки:
# Проверка на главного администратора
def is_super_admin(user_id: int) -> bool:
return user_id in ADMIN_IDS
# Проверка на любого администратора (главного или назначенного)
def is_admin(user_id: int) -> bool:
return user_id in ADMIN_IDS
Обе функции используются для управления доступом к различным функциям админ-панели.