From 1985a25ea8e8ae1de67cdda80fb5a3fb621b1ecc Mon Sep 17 00:00:00 2001 From: arkonsadter Date: Thu, 15 Jan 2026 19:38:21 +0600 Subject: [PATCH] Removed unused .md files --- API.md | 531 ----------------------- CHANGELOG.md | 176 -------- DRONE_SIMPLIFIED.md | 391 ----------------- MULTIPLE_OWNERS.md | 431 ------------------- OWNER_PERMISSIONS.md | 733 ------------------------------- OWNER_UI_READY.md | 297 ------------- OWNER_VIEW_ALL.md | 274 ------------ VERSION_1.1.0.md | 427 ------------------ ВЕРСИЯ_1.1.0_INFO.md | 328 -------------- ГОТОВО.md | 225 ---------- ДОКУМЕНТАЦИЯ.md | 998 ------------------------------------------- 11 files changed, 4811 deletions(-) delete mode 100644 API.md delete mode 100644 CHANGELOG.md delete mode 100644 DRONE_SIMPLIFIED.md delete mode 100644 MULTIPLE_OWNERS.md delete mode 100644 OWNER_PERMISSIONS.md delete mode 100644 OWNER_UI_READY.md delete mode 100644 OWNER_VIEW_ALL.md delete mode 100644 VERSION_1.1.0.md delete mode 100644 ВЕРСИЯ_1.1.0_INFO.md delete mode 100644 ГОТОВО.md delete mode 100644 ДОКУМЕНТАЦИЯ.md diff --git a/API.md b/API.md deleted file mode 100644 index ad803d1..0000000 --- a/API.md +++ /dev/null @@ -1,531 +0,0 @@ -# MC Panel API - Полная документация - -**Версия:** 1.0.0 -**Дата:** 15 января 2026 - ---- - -## 📋 Содержание - -1. [Базовая информация](#базовая-информация) -2. [Быстрый старт](#быстрый-старт) -3. [Аутентификация](#аутентификация) -4. [Управление пользователями](#управление-пользователями) -5. [Личный кабинет](#личный-кабинет) -6. [Управление серверами](#управление-серверами) -7. [Управление файлами](#управление-файлами) -8. [Тикеты](#тикеты) -9. [OpenID Connect](#openid-connect) -10. [Коды ошибок](#коды-ошибок) -11. [Примеры интеграции](#примеры-интеграции) -12. [Postman коллекция](#postman-коллекция) - ---- - -## Базовая информация - -**Base URL:** `http://localhost:8000` - -**Формат данных:** JSON - -**Аутентификация:** Bearer Token (JWT) - -Все защищенные эндпоинты требуют заголовок: -``` -Authorization: Bearer -``` - -### Заголовки запросов -``` -Content-Type: application/json -Authorization: Bearer -``` - -### Формат ответов -```json -{ - "message": "Success message", - "data": {} -} -``` - ---- - -## Быстрый старт - -### 1. Регистрация -```bash -curl -X POST http://localhost:8000/api/auth/register \ - -H "Content-Type: application/json" \ - -d '{"username":"admin","password":"password123"}' -``` - -### 2. Вход -```bash -curl -X POST http://localhost:8000/api/auth/login \ - -H "Content-Type: application/json" \ - -d '{"username":"admin","password":"password123"}' -``` - -**Ответ:** -```json -{ - "access_token": "eyJhbGc...", - "token_type": "bearer", - "username": "admin", - "role": "admin" -} -``` - -### 3. Использование токена -```bash -TOKEN="your_token_here" - -curl http://localhost:8000/api/servers \ - -H "Authorization: Bearer $TOKEN" -``` - ---- - -## Аутентификация - -### POST /api/auth/register -Регистрация нового пользователя. - -**Body:** -```json -{ - "username": "string", - "password": "string" -} -``` - -**Response (200):** -```json -{ - "access_token": "string", - "token_type": "bearer", - "username": "string", - "role": "admin|user" -} -``` - ---- - -### POST /api/auth/login -Вход в систему. - -**Body:** -```json -{ - "username": "string", - "password": "string" -} -``` - -**Response (200):** -```json -{ - "access_token": "string", - "token_type": "bearer", - "username": "string", - "role": "admin|user|support|banned" -} -``` - -**Errors:** -- `401` - Неверные учетные данные - ---- - -### GET /api/auth/me -Получить информацию о текущем пользователе. - -**Headers:** `Authorization: Bearer ` - -**Response (200):** -```json -{ - "username": "string", - "role": "admin|user|support|banned", - "servers": ["server1", "server2"] -} -``` - ---- - -## Управление пользователями - -### GET /api/users -Список всех пользователей. - -### PUT /api/users/{username}/role -Изменить роль пользователя (admin only). -**Body:** `{"role": "admin|user|support|banned"}` - -### PUT /api/users/{username}/servers -Управление доступом к серверам. -**Body:** `{"servers": ["server1", "server2"]}` - -### DELETE /api/users/{username} -Удалить пользователя (admin only). - ---- - -## Личный кабинет - -### GET /api/profile/stats -Статистика текущего пользователя. - -### GET /api/profile/stats/{username} -Статистика другого пользователя (admin/support). - -### PUT /api/profile/username -Изменить имя пользователя. -**Body:** `{"new_username": "string", "password": "string"}` - -### PUT /api/profile/password -Изменить пароль. -**Body:** `{"old_password": "string", "new_password": "string"}` - ---- - -## Управление серверами - -### GET /api/servers -Список серверов пользователя. - -### POST /api/servers/create -Создать новый сервер. -**Body:** -```json -{ - "name": "server1", - "displayName": "My Server", - "startCommand": "java -Xmx2G -jar server.jar nogui" -} -``` - -### GET /api/servers/{server}/config -Получить конфигурацию сервера. - -### PUT /api/servers/{server}/config -Обновить конфигурацию сервера. - -### DELETE /api/servers/{server} -Удалить сервер (admin only). - -### POST /api/servers/{server}/start -Запустить сервер. - -### POST /api/servers/{server}/stop -Остановить сервер. - -### POST /api/servers/{server}/command -Отправить команду серверу. -**Body:** `{"command": "say Hello"}` - -### GET /api/servers/{server}/stats -Получить статистику сервера (CPU, RAM, Disk). - -### WS /ws/servers/{server}/console -WebSocket для консоли сервера (логи в реальном времени). - ---- - -## Управление файлами - -### GET /api/servers/{server}/files?path={path} -Список файлов в директории. - -### POST /api/servers/{server}/files/create -Создать файл или папку. -**Body:** `{"type": "file|folder", "name": "string", "path": "string"}` - -### POST /api/servers/{server}/files/upload?path={path} -Загрузить файл (multipart/form-data). - -### GET /api/servers/{server}/files/download?path={path} -Скачать файл. - -### GET /api/servers/{server}/files/content?path={path} -Получить содержимое текстового файла. - -### PUT /api/servers/{server}/files/content?path={path} -Сохранить содержимое файла. -**Body:** `{"content": "string"}` - -### PUT /api/servers/{server}/files/rename?old_path={path}&new_name={name} -Переименовать файл. - -### POST /api/servers/{server}/files/move -Переместить файл. -**Body:** `{"source": "path", "destination": "path"}` - -### DELETE /api/servers/{server}/files?path={path} -Удалить файл или папку. - ---- - -## Тикеты - -### GET /api/tickets -Список тикетов (свои или все для admin/support). - -### POST /api/tickets/create -Создать новый тикет. -**Body:** `{"title": "string", "description": "string"}` - -### GET /api/tickets/{id} -Получить тикет по ID. - -### POST /api/tickets/{id}/message -Добавить сообщение в тикет. -**Body:** `{"text": "string"}` - -### PUT /api/tickets/{id}/status -Изменить статус тикета (admin/support). -**Body:** `{"status": "pending|in_progress|closed"}` - ---- - -## OpenID Connect - -### GET /api/auth/oidc/providers -Список доступных OIDC провайдеров. - -### GET /api/auth/oidc/{provider}/login -Начать аутентификацию через OIDC (redirect). - -### GET /api/auth/oidc/{provider}/callback -Callback от OIDC провайдера (redirect). - ---- - -## Коды ошибок - -| Код | Описание | Решение | -|-----|----------|---------| -| 200 | Успешно | - | -| 400 | Неверный запрос | Проверьте формат данных | -| 401 | Не авторизован | Войдите в систему | -| 403 | Доступ запрещен | Недостаточно прав | -| 404 | Не найдено | Проверьте URL | -| 500 | Ошибка сервера | Обратитесь к администратору | - ---- - -## Примеры интеграции - -### Python -```python -import requests - -class MCPanelAPI: - def __init__(self, base_url, username, password): - self.base_url = base_url - self.token = None - self.login(username, password) - - def login(self, username, password): - r = requests.post(f"{self.base_url}/api/auth/login", - json={"username": username, "password": password}) - self.token = r.json()["access_token"] - - def get_headers(self): - return {"Authorization": f"Bearer {self.token}"} - - def get_servers(self): - r = requests.get(f"{self.base_url}/api/servers", - headers=self.get_headers()) - return r.json() - - def start_server(self, server_name): - r = requests.post( - f"{self.base_url}/api/servers/{server_name}/start", - headers=self.get_headers()) - return r.json() - -# Использование -api = MCPanelAPI("http://localhost:8000", "admin", "password") -servers = api.get_servers() -api.start_server("survival") -``` - ---- - -### JavaScript -```javascript -class MCPanelAPI { - constructor(baseURL) { - this.baseURL = baseURL; - this.token = null; - } - - async login(username, password) { - const response = await fetch(`${this.baseURL}/api/auth/login`, { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({username, password}) - }); - const data = await response.json(); - this.token = data.access_token; - } - - getHeaders() { - return { - 'Authorization': `Bearer ${this.token}`, - 'Content-Type': 'application/json' - }; - } - - async getServers() { - const response = await fetch(`${this.baseURL}/api/servers`, { - headers: this.getHeaders() - }); - return await response.json(); - } - - async startServer(serverName) { - const response = await fetch( - `${this.baseURL}/api/servers/${serverName}/start`, - {method: 'POST', headers: this.getHeaders()} - ); - return await response.json(); - } -} - -// Использование -const api = new MCPanelAPI('http://localhost:8000'); -await api.login('admin', 'password'); -const servers = await api.getServers(); -await api.startServer('survival'); -``` - ---- - -### cURL примеры - -```bash -# Вход -TOKEN=$(curl -s -X POST http://localhost:8000/api/auth/login \ - -H "Content-Type: application/json" \ - -d '{"username":"admin","password":"pass"}' \ - | jq -r '.access_token') - -# Список серверов -curl http://localhost:8000/api/servers \ - -H "Authorization: Bearer $TOKEN" - -# Создать сервер -curl -X POST http://localhost:8000/api/servers/create \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"name":"survival","displayName":"Survival","startCommand":"java -jar server.jar"}' - -# Запустить сервер -curl -X POST http://localhost:8000/api/servers/survival/start \ - -H "Authorization: Bearer $TOKEN" - -# Отправить команду -curl -X POST http://localhost:8000/api/servers/survival/command \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"command":"say Hello"}' - -# Список файлов -curl "http://localhost:8000/api/servers/survival/files?path=plugins" \ - -H "Authorization: Bearer $TOKEN" - -# Создать тикет -curl -X POST http://localhost:8000/api/tickets/create \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"title":"Problem","description":"Details"}' -``` - ---- - -## Postman коллекция - -### Импорт коллекции -1. Откройте Postman -2. File → Import -3. Выберите файл `MC_Panel_API.postman_collection.json` -4. Коллекция готова к использованию - -### Настройка переменных -В коллекции настройте переменные: -- `baseUrl` = `http://localhost:8000` -- `serverName` = `survival` (или имя вашего сервера) -- `token` = автоматически сохраняется после Login - -### Использование -1. Выполните запрос "Login" для получения токена -2. Токен автоматически сохранится в переменную `token` -3. Все остальные запросы будут использовать этот токен -4. Используйте любые эндпоинты из коллекции - -### Структура коллекции -- **Authentication** - регистрация, вход, получение пользователя -- **Users** - управление пользователями -- **Servers** - управление серверами -- **Files** - операции с файлами -- **Tickets** - система тикетов -- **Profile** - личный кабинет -- **OpenID Connect** - OIDC провайдеры - ---- - -## Безопасность - -### JWT Токены -- Срок действия: 7 дней -- Алгоритм: HS256 -- Хранение: localStorage (фронтенд) - -### Рекомендации -1. Используйте HTTPS в production -2. Измените SECRET_KEY в `backend/main.py` -3. Используйте сильные пароли (минимум 6 символов) -4. Регулярно обновляйте зависимости -5. Ограничьте CORS для конкретных доменов - ---- - -## Лимиты и ограничения - -- **Размер файла:** не ограничен (зависит от сервера) -- **Количество запросов:** не ограничено -- **Длина сообщения:** не ограничена -- **Количество серверов:** не ограничено -- **Срок хранения логов:** 1000 последних строк - ---- - -## Changelog - -### 1.0.0 (15.01.2026) -- ✨ Первый релиз API -- ✅ 37 эндпоинтов -- ✅ JWT аутентификация -- ✅ OpenID Connect -- ✅ WebSocket консоль -- ✅ Полное управление серверами -- ✅ Файловый менеджер -- ✅ Система тикетов - ---- - -## Поддержка - -- **Документация проекта:** ДОКУМЕНТАЦИЯ.md -- **Postman коллекция:** MC_Panel_API.postman_collection.json -- **Тикеты:** Используйте систему тикетов в панели - ---- - -**Версия API:** 1.0.0 -**Дата обновления:** 15 января 2026 - -**Спасибо за использование MC Panel API!** 🚀 diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 08ed1e7..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,176 +0,0 @@ -# Changelog - История изменений MC Panel - -Все значимые изменения в проекте документируются в этом файле. - -Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/), -и проект следует [Semantic Versioning](https://semver.org/lang/ru/). - ---- - -## [1.1.0] - 2026-01-15 - -### Добавлено ✨ - -#### Система прав и ролей -- **Роль владельца (Owner)** - полный контроль над панелью -- **Система прав** - детальное управление возможностями пользователей -- **5 ролей**: Owner, Admin, Support, User, Banned -- **7 типов прав**: manage_users, manage_roles, manage_servers, manage_tickets, manage_files, delete_users, view_all_resources - -#### API эндпоинты -- `GET /api/users` - Получить список пользователей -- `PUT /api/users/{user_id}/role` - Изменить роль пользователя -- `PUT /api/users/{user_id}/permissions` - Изменить права пользователя -- `POST /api/users/{user_id}/access/servers` - Выдать доступ к серверу -- `DELETE /api/users/{user_id}/access/servers/{server_name}` - Забрать доступ к серверу -- `DELETE /api/users/{user_id}` - Удалить пользователя -- `POST /api/users/{user_id}/ban` - Заблокировать пользователя -- `POST /api/users/{user_id}/unban` - Разблокировать пользователя - -#### Инструменты -- **migrate_users.py** - Скрипт миграции пользователей на новую систему -- **MIGRATE_USERS.bat** - Bat файл для запуска миграции на Windows -- **OWNER_PERMISSIONS.md** - Полная документация системы прав (~500 строк) - -#### Документация -- Документация системы прав и ролей -- Примеры использования API на Python, JavaScript, cURL -- FAQ по системе прав -- Инструкции по миграции - -### Изменено 🔄 - -- Первый зарегистрированный пользователь теперь получает роль `owner` вместо `admin` -- Обновлена структура пользователя в `users.json`: - - Добавлено поле `permissions` с детальными правами - - Добавлено поле `resource_access` для управления доступом к ресурсам -- Все эндпоинты управления пользователями теперь проверяют права доступа -- Обновлена версия проекта с 1.0.0 до 1.1.0 - -### Безопасность 🔒 - -- Добавлена проверка прав для всех административных эндпоинтов -- Логирование всех действий владельца -- Защита от удаления владельца -- Автоматическое понижение роли при передаче прав владельца - ---- - -## [1.0.0] - 2026-01-15 - -### Добавлено ✨ - -#### Backend (FastAPI) -- REST API с 37 эндпоинтами -- JWT аутентификация (токены на 7 дней) -- OpenID Connect интеграция (ZITADEL) -- WebSocket для real-time консоли -- Управление Minecraft серверами -- Файловый менеджер API -- Система тикетов -- Роли пользователей (admin, user) -- Bcrypt хеширование паролей - -#### Frontend (React) -- 6 тем оформления (modern, dark, light, blue, green, purple) -- Цветная консоль (INFO=зелёный, WARN=жёлтый, ERROR=красный) -- Файловый менеджер с поиском -- Создание файлов и папок -- Перемещение файлов (Cut/Paste) -- Система уведомлений (4 типа: success, error, warning, info) -- Тикеты с real-time обновлениями (каждые 3 секунды) -- Статистика серверов (CPU, RAM, диск) -- Личный кабинет -- Responsive дизайн - -#### Docker & DevOps -- Multi-stage Dockerfile (Node.js + Python) -- Docker Compose конфигурация -- Non-root пользователь для безопасности -- Healthcheck для мониторинга -- Volumes для персистентности данных -- Nginx reverse proxy с SSL/TLS -- Security headers (HSTS, X-Frame-Options, etc.) -- Rate limiting для защиты от DDoS -- 4 CI/CD пайплайна (Drone): - - code-quality - Проверка качества кода - - build-and-publish - Сборка и публикация образа - - deploy-staging - Деплой на staging - - deploy-production - Деплой на production - -#### Bat файлы (Windows) -- START_PANEL.bat - Локальный запуск -- START_DOCKER.bat - Запуск в Docker -- STOP_DOCKER.bat - Остановка Docker -- RESTART_DOCKER.bat - Перезапуск Docker -- LOGS_DOCKER.bat - Просмотр логов -- UPDATE_DOCKER.bat - Обновление Docker образа -- BACKUP_DATA.bat - Создание backup -- RESTORE_DATA.bat - Восстановление из backup - -#### Документация -- README.md - Главная навигация (~200 строк) -- ДОКУМЕНТАЦИЯ.md - Полное руководство (~500 строк) -- API.md - API документация (~300 строк) -- DOCKER.md - Docker и CI/CD (~400 строк) -- DOCKER_COMMANDS.md - Docker команды (~300 строк) -- DOCKER_ГОТОВО.md - Docker summary (~400 строк) -- ГОТОВО.md - История разработки (~200 строк) -- ПРОЕКТ_ЗАВЕРШЁН.md - Полный обзор (~600 строк) -- ФИНАЛЬНЫЙ_СПИСОК.md - Список файлов (~700 строк) -- INSTALL_DOCKER.md - Установка Docker (~400 строк) -- FAQ.md - Часто задаваемые вопросы (~500 строк) -- BAT_FILES.md - Описание bat файлов (~400 строк) -- QUICKSTART.md - Быстрый старт (~300 строк) -- РАБОТА_ЗАВЕРШЕНА.md - Финальный summary (~200 строк) -- CHECKLIST.md - Финальный checklist (~400 строк) - -#### Другое -- MC_Panel_API.postman_collection.json - Postman коллекция (40+ запросов) -- .gitignore - Git ignore правила -- .dockerignore - Docker ignore правила -- .env.example - Шаблон переменных окружения - -### Исправлено 🐛 - -- Ошибка импорта `authlib.integrations.fastapi_client` → `starlette_client` -- Проблемы с drag & drop в файловом менеджере (отключено по запросу) -- Уведомления теперь показываются для всех действий -- Real-time обновления в тикетах работают корректно - -### Безопасность 🔒 - -- JWT токены с истечением через 7 дней -- Bcrypt хеширование паролей (cost factor 12) -- OpenID Connect поддержка -- Проверка прав доступа на всех эндпоинтах -- Защита файловой системы от path traversal -- Non-root Docker пользователь -- Security headers в Nginx -- Rate limiting в Nginx -- HTTPS обязательный для production - ---- - -## Типы изменений - -- **Добавлено** ✨ - новая функциональность -- **Изменено** 🔄 - изменения в существующей функциональности -- **Устарело** ⚠️ - функциональность, которая скоро будет удалена -- **Удалено** 🗑️ - удалённая функциональность -- **Исправлено** 🐛 - исправление ошибок -- **Безопасность** 🔒 - изменения, связанные с безопасностью - ---- - -## Ссылки - -- [Документация](ДОКУМЕНТАЦИЯ.md) -- [API](API.md) -- [Docker](DOCKER.md) -- [FAQ](FAQ.md) - ---- - -**Формат:** [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/) -**Версионирование:** [Semantic Versioning](https://semver.org/lang/ru/) diff --git a/DRONE_SIMPLIFIED.md b/DRONE_SIMPLIFIED.md deleted file mode 100644 index 66b4740..0000000 --- a/DRONE_SIMPLIFIED.md +++ /dev/null @@ -1,391 +0,0 @@ -# 🚀 Упрощённый Drone CI/CD - -**Дата:** 15 января 2026 -**Статус:** УПРОЩЕНО ✅ - ---- - -## 🎯 Что изменилось - -### До изменения - -**4 пайплайна:** -1. code-quality - Проверка качества кода -2. build-and-publish - Сборка и публикация образа -3. deploy-staging - Деплой на staging -4. deploy-production - Деплой на production - -**Уведомления:** -- notify-success - Уведомление об успешной сборке -- notify-failure - Уведомление об ошибке -- notify-production-deploy - Уведомление о деплое - ---- - -### После изменения - -**2 пайплайна:** -1. code-quality - Проверка качества кода -2. build-and-publish - Сборка и публикация образа - -**Уведомления:** Удалены - -**Деплой пайплайны:** Удалены - ---- - -## 📋 Оставшиеся пайплайны - -### 1. code-quality - -**Назначение:** Проверка качества и безопасности кода - -**Триггеры:** -- Push в любую ветку -- Pull Request - -**Шаги:** -1. **python-lint** - Проверка Python кода - - flake8 (синтаксис и стиль) - - pylint (качество кода) - - black (форматирование) - - isort (сортировка импортов) - -2. **frontend-lint** - Проверка JavaScript/React кода - - ESLint (синтаксис и стиль) - - Prettier (форматирование) - -3. **python-security** - Проверка безопасности Python - - safety (известные уязвимости) - - bandit (security linter) - -4. **frontend-security** - Проверка безопасности Node.js - - npm audit (уязвимости зависимостей) - ---- - -### 2. build-and-publish - -**Назначение:** Сборка и публикация Docker образа - -**Триггеры:** -- Push в ветки: main, master, develop -- Push тега - -**Зависимости:** -- Запускается только после успешного code-quality - -**Шаги:** -1. **build-and-push** - Сборка и публикация образа - - Сборка Docker образа - - Публикация в registry - - Автоматическое тегирование - -2. **scan-image** - Сканирование на уязвимости - - Trivy сканирование - - Проверка HIGH и CRITICAL уязвимостей - ---- - -## 🗑️ Удалённые пайплайны - -### deploy-staging -**Причина удаления:** Упрощение конфигурации - -**Что делал:** -- SSH подключение к staging серверу -- Обновление Docker образа -- Перезапуск контейнеров - -**Альтернатива:** Ручной деплой через SSH - ---- - -### deploy-production -**Причина удаления:** Упрощение конфигурации - -**Что делал:** -- SSH подключение к production серверу -- Обновление Docker образа -- Перезапуск контейнеров -- Уведомление в Slack - -**Альтернатива:** Ручной деплой через SSH - ---- - -## 🗑️ Удалённые уведомления - -### notify-success -**Что делал:** Отправка уведомления в Slack об успешной сборке - -### notify-failure -**Что делал:** Отправка уведомления в Slack об ошибке сборки - -### notify-production-deploy -**Что делал:** Отправка уведомления в Slack о деплое на production - -**Причина удаления:** Упрощение, не требуется настройка Slack webhook - ---- - -## 🔧 Настройка - -### Необходимые Drone Secrets - -Для работы оставшихся пайплайнов нужны только: - -```bash -# Docker Registry -docker_username=your_username -docker_password=your_password -``` - -### Удалённые Secrets (больше не нужны) - -```bash -# Slack (удалено) -slack_webhook - -# SSH для staging (удалено) -staging_host -staging_username -staging_ssh_key - -# SSH для production (удалено) -production_host -production_username -production_ssh_key -``` - ---- - -## 🚀 Как использовать - -### Автоматическая проверка кода - -При каждом push или pull request: - -```bash -git add . -git commit -m "Update code" -git push origin main -``` - -**Результат:** -1. ✅ Запускается code-quality -2. ✅ Проверяется качество кода -3. ✅ Проверяется безопасность -4. ✅ Если всё ОК → запускается build-and-publish -5. ✅ Собирается Docker образ -6. ✅ Публикуется в registry -7. ✅ Сканируется на уязвимости - ---- - -### Ручной деплой на staging - -```bash -# SSH на staging сервер -ssh user@staging-server - -# Обновление -cd /opt/mc-panel -docker-compose pull -docker-compose up -d -docker-compose ps -``` - ---- - -### Ручной деплой на production - -```bash -# SSH на production сервер -ssh user@production-server - -# Обновление -cd /opt/mc-panel -docker-compose pull -docker-compose up -d -docker-compose ps -``` - ---- - -## 📊 Сравнение - -### До упрощения - -``` -Push → code-quality → build-and-publish → deploy-staging - ↓ - notify-success - ↓ - notify-failure - -Tag → code-quality → build-and-publish → deploy-production - ↓ - notify-production-deploy -``` - -**Требуется:** -- 7 Drone secrets -- Настройка Slack -- Настройка SSH для 2 серверов - ---- - -### После упрощения - -``` -Push → code-quality → build-and-publish - -Tag → code-quality → build-and-publish -``` - -**Требуется:** -- 2 Drone secrets (docker_username, docker_password) -- Ручной деплой через SSH - ---- - -## ✅ Преимущества упрощения - -### Меньше настроек -- ❌ Не нужен Slack webhook -- ❌ Не нужны SSH ключи -- ❌ Не нужны настройки серверов -- ✅ Только Docker registry - -### Больше контроля -- ✅ Ручной деплой = больше контроля -- ✅ Можно проверить перед деплоем -- ✅ Можно откатить если нужно - -### Проще поддержка -- ✅ Меньше кода -- ✅ Меньше зависимостей -- ✅ Проще понять -- ✅ Проще отладить - ---- - -## 🔄 Workflow - -### Разработка - -```bash -# 1. Разработка -git checkout -b feature/new-feature -# ... код ... -git commit -m "Add new feature" -git push origin feature/new-feature - -# 2. Pull Request -# Создать PR на GitHub/GitLab -# Drone автоматически проверит код - -# 3. Merge -# После одобрения PR -git checkout main -git merge feature/new-feature -git push origin main - -# 4. Автоматическая сборка -# Drone соберёт и опубликует образ - -# 5. Ручной деплой -ssh user@server -cd /opt/mc-panel -docker-compose pull -docker-compose up -d -``` - ---- - -### Production Release - -```bash -# 1. Создать тег -git tag -a v1.1.0 -m "Release 1.1.0" -git push origin v1.1.0 - -# 2. Автоматическая сборка -# Drone соберёт образ с тегом v1.1.0 - -# 3. Ручной деплой на production -ssh user@production-server -cd /opt/mc-panel -docker-compose pull -docker-compose up -d -docker-compose ps -``` - ---- - -## 📝 Файл .drone.yml - -### Структура - -```yaml ---- -# Пайплайн 1: Проверка качества -kind: pipeline -name: code-quality -trigger: push, pull_request -steps: - - python-lint - - frontend-lint - - python-security - - frontend-security - ---- -# Пайплайн 2: Сборка и публикация -kind: pipeline -name: build-and-publish -trigger: push (main/master/develop), tag -depends_on: code-quality -steps: - - build-and-push - - scan-image -``` - -### Размер файла - -**До:** ~300 строк -**После:** ~120 строк -**Уменьшение:** 60% - ---- - -## 🎯 Итог - -**Конфигурация упрощена!** ✅ - -### Что осталось: -- ✅ Проверка качества кода -- ✅ Проверка безопасности -- ✅ Сборка Docker образа -- ✅ Публикация в registry -- ✅ Сканирование на уязвимости - -### Что удалено: -- ❌ Автоматический деплой -- ❌ Уведомления в Slack -- ❌ SSH настройки - -### Результат: -- 🎯 Проще настроить -- 🎯 Проще поддерживать -- 🎯 Больше контроля над деплоем -- 🎯 Меньше зависимостей - ---- - -**Версия:** 1.1.0 -**Дата:** 15 января 2026 -**Статус:** УПРОЩЕНО ✅ - -**Меньше сложности - больше контроля!** 🚀 - diff --git a/MULTIPLE_OWNERS.md b/MULTIPLE_OWNERS.md deleted file mode 100644 index dfb2f29..0000000 --- a/MULTIPLE_OWNERS.md +++ /dev/null @@ -1,431 +0,0 @@ -# 👑 Несколько владельцев - -**Дата:** 15 января 2026 -**Статус:** РЕАЛИЗОВАНО ✅ - ---- - -## 🎯 Что изменилось - -### До изменения - -**Ограничение:** Мог быть только ОДИН владелец - -``` -❌ При назначении нового owner, старый owner автоматически становился admin -❌ Нельзя было удалить владельца -❌ Нельзя было заблокировать владельца -``` - -**Проблема:** Если нужно несколько администраторов с полными правами, приходилось использовать роль admin, у которой нет права изменять роли. - ---- - -### После изменения - -**Возможность:** Может быть НЕСКОЛЬКО владельцев - -``` -✅ Можно назначить несколько пользователей с ролью owner -✅ Можно удалить владельца (если их больше одного) -✅ Можно заблокировать владельца (если их больше одного) -✅ Всегда должен остаться хотя бы один владелец -``` - -**Преимущество:** Несколько человек могут иметь полный контроль над панелью. - ---- - -## 📊 Новая логика - -### Назначение владельца - -**Было:** -```python -# Если назначается новый owner, текущий owner становится admin -if role_data.role == "owner": - for user in users.values(): - if user.get("role") == "owner": - user["role"] = "admin" # Понижение роли -``` - -**Стало:** -```python -# Разрешаем несколько владельцев -# Просто назначаем роль без изменения других владельцев -users[username]["role"] = role_data.role -``` - ---- - -### Удаление владельца - -**Было:** -```python -if users[username].get("role") == "owner": - raise HTTPException(400, "Нельзя удалить владельца") -``` - -**Стало:** -```python -if users[username].get("role") == "owner": - owners_count = sum(1 for u in users.values() if u.get("role") == "owner") - if owners_count <= 1: - raise HTTPException(400, "Нельзя удалить последнего владельца") -``` - -**Логика:** -- Если владельцев больше одного → можно удалить -- Если владелец последний → нельзя удалить - ---- - -### Блокировка владельца - -**Было:** -```python -if users[username].get("role") == "owner": - raise HTTPException(400, "Нельзя заблокировать владельца") -``` - -**Стало:** -```python -if users[username].get("role") == "owner": - owners_count = sum(1 for u in users.values() if u.get("role") == "owner") - if owners_count <= 1: - raise HTTPException(400, "Нельзя заблокировать последнего владельца") -``` - -**Логика:** -- Если владельцев больше одного → можно заблокировать -- Если владелец последний → нельзя заблокировать - ---- - -## 💡 Примеры использования - -### Сценарий 1: Назначить второго владельца - -**Текущее состояние:** -```json -{ - "Root": {"role": "owner"}, - "Admin1": {"role": "admin"} -} -``` - -**Действие:** Назначить Admin1 владельцем - -**Результат:** -```json -{ - "Root": {"role": "owner"}, - "Admin1": {"role": "owner"} // Теперь тоже владелец! -} -``` - -**Оба пользователя имеют полные права!** ✅ - ---- - -### Сценарий 2: Удалить одного из владельцев - -**Текущее состояние:** -```json -{ - "Root": {"role": "owner"}, - "Admin1": {"role": "owner"}, - "User1": {"role": "user"} -} -``` - -**Действие:** Удалить Admin1 - -**Результат:** -```json -{ - "Root": {"role": "owner"}, - "User1": {"role": "user"} -} -``` - -**Успешно!** Root остался владельцем ✅ - ---- - -### Сценарий 3: Попытка удалить последнего владельца - -**Текущее состояние:** -```json -{ - "Root": {"role": "owner"}, - "User1": {"role": "user"} -} -``` - -**Действие:** Удалить Root - -**Результат:** -``` -❌ Ошибка: "Нельзя удалить последнего владельца. Должен остаться хотя бы один владелец." -``` - -**Защита от потери контроля!** 🔒 - ---- - -### Сценарий 4: Три владельца - -**Возможно:** -```json -{ - "Root": {"role": "owner"}, - "Admin1": {"role": "owner"}, - "Admin2": {"role": "owner"}, - "User1": {"role": "user"} -} -``` - -**Все три владельца имеют:** -- ✅ Управление пользователями -- ✅ Изменение ролей -- ✅ Удаление пользователей -- ✅ Просмотр всех ресурсов -- ✅ Все права - ---- - -## 🎯 Как использовать - -### Назначить нового владельца - -1. Войдите как владелец -2. Нажмите "Управление" -3. Найдите пользователя -4. Нажмите "Роль" -5. Выберите "Владелец" -6. Готово! Теперь два владельца - -### Понизить владельца до админа - -1. Войдите как владелец -2. Нажмите "Управление" -3. Найдите другого владельца -4. Нажмите "Роль" -5. Выберите "Администратор" -6. Владелец понижен до админа - -### Удалить владельца - -1. Убедитесь что владельцев больше одного -2. Войдите как владелец -3. Нажмите "Управление" -4. Найдите владельца для удаления -5. Нажмите кнопку удаления (красная) -6. Подтвердите -7. Владелец удалён (если их было больше одного) - ---- - -## 🔒 Правила безопасности - -### Что НЕЛЬЗЯ сделать: - -- ❌ Удалить последнего владельца -- ❌ Заблокировать последнего владельца -- ❌ Изменить свою роль -- ❌ Удалить самого себя -- ❌ Заблокировать самого себя - -### Что МОЖНО: - -- ✅ Назначить несколько владельцев -- ✅ Удалить владельца (если их больше одного) -- ✅ Заблокировать владельца (если их больше одного) -- ✅ Понизить владельца до админа -- ✅ Повысить админа до владельца - ---- - -## 📊 Сравнение ролей - -### Owner (Владелец) - Несколько человек ✅ - -**Права:** -- ✅ Управление пользователями -- ✅ Изменение ролей (включая назначение других владельцев) -- ✅ Удаление пользователей -- ✅ Управление серверами -- ✅ Просмотр всех ресурсов -- ✅ Все права - -**Ограничения:** -- Должен быть хотя бы один владелец -- Нельзя удалить/заблокировать себя - -### Admin (Администратор) - Несколько человек ✅ - -**Права:** -- ✅ Управление пользователями -- ✅ Управление серверами -- ✅ Просмотр всех ресурсов -- ❌ Изменение ролей -- ❌ Удаление пользователей - -**Отличие от Owner:** -- Не может назначать владельцев -- Не может удалять пользователей - ---- - -## 🎨 UI изменения - -### Модальное окно изменения роли - -Теперь при выборе "Владелец" не будет предупреждения о понижении текущего владельца: - -``` -┌─────────────────────────────────┐ -│ Изменить роль: Admin1 │ -├─────────────────────────────────┤ -│ [👑 Владелец] │ -│ Полный контроль над панелью │ -│ ⚠️ Может быть несколько │ ← Новое -│ │ -│ [🛡️ Администратор] ← Текущая │ -│ Управление без изменения │ -│ ролей │ -│ │ -│ [Отмена] │ -└─────────────────────────────────┘ -``` - -### Список пользователей - -Теперь может быть несколько пользователей с меткой "👑 Владелец": - -``` -1. Root [👑 Владелец] -2. Admin1 [👑 Владелец] ← Новое -3. Admin2 [🛡️ Админ] -4. User1 [✅ Пользователь] -``` - ---- - -## 🔧 Технические детали - -### Изменённые файлы - -**Файл:** `backend/main.py` - -**Изменённые эндпоинты:** -1. `PUT /api/users/{username}/role` - Убрано автоматическое понижение -2. `DELETE /api/users/{username}` - Добавлена проверка количества владельцев -3. `POST /api/users/{username}/ban` - Добавлена проверка количества владельцев - -**Добавленная логика:** -```python -# Подсчёт владельцев -owners_count = sum(1 for u in users.values() if u.get("role") == "owner") - -# Проверка перед удалением/блокировкой -if owners_count <= 1: - raise HTTPException(400, "Нельзя удалить/заблокировать последнего владельца") -``` - ---- - -## 🎯 Рекомендации - -### Когда использовать несколько владельцев - -**Хорошие случаи:** -- ✅ Несколько администраторов проекта -- ✅ Команда разработчиков -- ✅ Резервный владелец на случай отсутствия основного -- ✅ Разделение ответственности - -**Плохие случаи:** -- ❌ Слишком много владельцев (риск безопасности) -- ❌ Назначение владельцем ненадёжных пользователей -- ❌ Владелец "на пробу" - -### Рекомендуемая структура - -``` -👑 Owner (2-3 человека) - Основные администраторы - ↓ -🛡️ Admin (3-5 человек) - Помощники администраторов - ↓ -💬 Support (5-10 человек) - Техническая поддержка - ↓ -✅ User (неограниченно) - Обычные пользователи -``` - ---- - -## 🚀 Перезапуск - -После изменений перезапустите панель: - -```bash -RESTART_ALL.bat -``` - -Или вручную: -```bash -cd backend -python main.py -``` - ---- - -## ✅ Проверка - -### Тест 1: Назначить второго владельца - -1. Войдите как Root -2. Управление → MihailPrud → Роль → Владелец -3. Проверьте что оба имеют роль owner - -### Тест 2: Попытка удалить единственного владельца - -1. Понизьте всех владельцев кроме одного -2. Попытайтесь удалить последнего -3. Должна быть ошибка - -### Тест 3: Удаление одного из нескольких владельцев - -1. Назначьте двух владельцев -2. Удалите одного -3. Должно пройти успешно - ---- - -## 🎉 Итог - -**Теперь можно иметь несколько владельцев!** ✅ - -### Преимущества: - -- ✅ Гибкость в управлении -- ✅ Резервирование доступа -- ✅ Разделение ответственности -- ✅ Защита от потери контроля (всегда остаётся хотя бы один владелец) - -### Безопасность: - -- 🔒 Нельзя удалить последнего владельца -- 🔒 Нельзя заблокировать последнего владельца -- 🔒 Нельзя изменить свою роль -- 🔒 Нельзя удалить себя - ---- - -**Версия:** 1.1.0 -**Дата:** 15 января 2026 -**Статус:** РАБОТАЕТ ✅ - -**Несколько владельцев - больше контроля!** 👑👑👑 - diff --git a/OWNER_PERMISSIONS.md b/OWNER_PERMISSIONS.md deleted file mode 100644 index 34be20b..0000000 --- a/OWNER_PERMISSIONS.md +++ /dev/null @@ -1,733 +0,0 @@ -# 👑 Роль Владельца и Система Управления Правами - -**Дата:** 15 января 2026 -**Версия:** 1.1.0 - ---- - -## 📋 Содержание - -1. [Обзор](#обзор) -2. [Роль Владельца](#роль-владельца) -3. [Система Прав](#система-прав) -4. [API Эндпоинты](#api-эндпоинты) -5. [Примеры Использования](#примеры-использования) -6. [Миграция Существующих Пользователей](#миграция-существующих-пользователей) - ---- - -## Обзор - -В MC Panel добавлена роль **Владелец (Owner)** с расширенными возможностями управления правами пользователей. Владелец может: - -- ✅ Изменять роли пользователей (admin, user, support, banned) -- ✅ Управлять правами доступа к ресурсам -- ✅ Забирать доступ к серверам, тикетам, файлам -- ✅ Выдавать доступ к ресурсам -- ✅ Удалять пользователей -- ✅ Полный контроль над панелью - ---- - -## Роль Владельца - -### Как стать владельцем? - -**Первый зарегистрированный пользователь автоматически получает роль владельца.** - -```json -{ - "username": "Root", - "role": "owner", - "permissions": { - "manage_users": true, - "manage_roles": true, - "manage_servers": true, - "manage_tickets": true, - "manage_files": true, - "delete_users": true, - "view_all_resources": true - } -} -``` - -### Иерархия ролей - -``` -Owner (Владелец) - ↓ -Admin (Администратор) - ↓ -Support (Поддержка) - ↓ -User (Пользователь) - ↓ -Banned (Заблокирован) -``` - -### Возможности по ролям - -| Возможность | Owner | Admin | Support | User | Banned | -|------------|-------|-------|---------|------|--------| -| Управление пользователями | ✅ | ✅ | ❌ | ❌ | ❌ | -| Изменение ролей | ✅ | ❌ | ❌ | ❌ | ❌ | -| Удаление пользователей | ✅ | ❌ | ❌ | ❌ | ❌ | -| Управление всеми серверами | ✅ | ✅ | ❌ | ❌ | ❌ | -| Управление своими серверами | ✅ | ✅ | ✅ | ✅ | ❌ | -| Просмотр всех тикетов | ✅ | ✅ | ✅ | ❌ | ❌ | -| Ответ на тикеты | ✅ | ✅ | ✅ | ✅ | ❌ | -| Создание тикетов | ✅ | ✅ | ✅ | ✅ | ❌ | -| Доступ к панели | ✅ | ✅ | ✅ | ✅ | ❌ | - ---- - -## Система Прав - -### Структура прав пользователя - -```json -{ - "username": "example_user", - "role": "user", - "permissions": { - "manage_users": false, - "manage_roles": false, - "manage_servers": true, - "manage_tickets": true, - "manage_files": true, - "delete_users": false, - "view_all_resources": false - }, - "resource_access": { - "servers": ["server1", "server2"], - "tickets": ["ticket1", "ticket2"], - "files": ["server1/*", "server2/*"] - } -} -``` - -### Типы прав - -#### 1. manage_users -- Создание пользователей -- Редактирование профилей -- Просмотр списка пользователей - -#### 2. manage_roles -- Изменение ролей пользователей -- Только для Owner - -#### 3. manage_servers -- Создание серверов -- Запуск/остановка серверов -- Удаление серверов - -#### 4. manage_tickets -- Создание тикетов -- Ответ на тикеты -- Изменение статуса - -#### 5. manage_files -- Загрузка файлов -- Редактирование файлов -- Удаление файлов - -#### 6. delete_users -- Удаление пользователей -- Только для Owner - -#### 7. view_all_resources -- Просмотр всех серверов -- Просмотр всех тикетов -- Доступ ко всем файлам - ---- - -## API Эндпоинты - -### 1. Получить список пользователей - -```http -GET /api/users -Authorization: Bearer -``` - -**Требуется роль:** Owner или Admin - -**Ответ:** -```json -{ - "users": [ - { - "id": 1, - "username": "Root", - "role": "owner", - "created_at": "2026-01-15T10:00:00Z" - }, - { - "id": 2, - "username": "User1", - "role": "user", - "created_at": "2026-01-15T11:00:00Z" - } - ] -} -``` - ---- - -### 2. Изменить роль пользователя - -```http -PUT /api/users/{user_id}/role -Authorization: Bearer -Content-Type: application/json - -{ - "role": "admin" -} -``` - -**Требуется роль:** Owner - -**Доступные роли:** -- `owner` (только один владелец) -- `admin` -- `support` -- `user` -- `banned` - -**Ответ:** -```json -{ - "message": "Роль пользователя изменена", - "user": { - "id": 2, - "username": "User1", - "role": "admin" - } -} -``` - ---- - -### 3. Изменить права пользователя - -```http -PUT /api/users/{user_id}/permissions -Authorization: Bearer -Content-Type: application/json - -{ - "permissions": { - "manage_servers": true, - "manage_tickets": true, - "manage_files": false - } -} -``` - -**Требуется роль:** Owner - -**Ответ:** -```json -{ - "message": "Права пользователя обновлены", - "permissions": { - "manage_servers": true, - "manage_tickets": true, - "manage_files": false - } -} -``` - ---- - -### 4. Управление доступом к ресурсам - -#### Выдать доступ к серверу - -```http -POST /api/users/{user_id}/access/servers -Authorization: Bearer -Content-Type: application/json - -{ - "server_name": "Survival" -} -``` - -**Требуется роль:** Owner или Admin - -**Ответ:** -```json -{ - "message": "Доступ к серверу выдан", - "server": "Survival", - "user": "User1" -} -``` - -#### Забрать доступ к серверу - -```http -DELETE /api/users/{user_id}/access/servers/{server_name} -Authorization: Bearer -``` - -**Требуется роль:** Owner или Admin - -**Ответ:** -```json -{ - "message": "Доступ к серверу отозван", - "server": "Survival", - "user": "User1" -} -``` - ---- - -### 5. Удалить пользователя - -```http -DELETE /api/users/{user_id} -Authorization: Bearer -``` - -**Требуется роль:** Owner - -**Ответ:** -```json -{ - "message": "Пользователь удалён", - "username": "User1" -} -``` - -**Примечание:** Владельца удалить нельзя! - ---- - -### 6. Заблокировать пользователя - -```http -POST /api/users/{user_id}/ban -Authorization: Bearer -Content-Type: application/json - -{ - "reason": "Нарушение правил" -} -``` - -**Требуется роль:** Owner или Admin - -**Ответ:** -```json -{ - "message": "Пользователь заблокирован", - "username": "User1", - "reason": "Нарушение правил" -} -``` - ---- - -### 7. Разблокировать пользователя - -```http -POST /api/users/{user_id}/unban -Authorization: Bearer -``` - -**Требуется роль:** Owner или Admin - -**Ответ:** -```json -{ - "message": "Пользователь разблокирован", - "username": "User1" -} -``` - ---- - -## Примеры Использования - -### Python - -```python -import requests - -# Токен владельца -token = "your_owner_token" -headers = {"Authorization": f"Bearer {token}"} -base_url = "http://localhost:8000" - -# 1. Получить список пользователей -response = requests.get(f"{base_url}/api/users", headers=headers) -users = response.json()["users"] -print(f"Всего пользователей: {len(users)}") - -# 2. Изменить роль пользователя -user_id = 2 -response = requests.put( - f"{base_url}/api/users/{user_id}/role", - headers=headers, - json={"role": "admin"} -) -print(response.json()["message"]) - -# 3. Выдать доступ к серверу -response = requests.post( - f"{base_url}/api/users/{user_id}/access/servers", - headers=headers, - json={"server_name": "Survival"} -) -print(response.json()["message"]) - -# 4. Заблокировать пользователя -response = requests.post( - f"{base_url}/api/users/{user_id}/ban", - headers=headers, - json={"reason": "Нарушение правил"} -) -print(response.json()["message"]) - -# 5. Разблокировать пользователя -response = requests.post( - f"{base_url}/api/users/{user_id}/unban", - headers=headers -) -print(response.json()["message"]) - -# 6. Удалить пользователя -response = requests.delete( - f"{base_url}/api/users/{user_id}", - headers=headers -) -print(response.json()["message"]) -``` - ---- - -### JavaScript - -```javascript -const token = "your_owner_token"; -const baseUrl = "http://localhost:8000"; - -// 1. Получить список пользователей -async function getUsers() { - const response = await fetch(`${baseUrl}/api/users`, { - headers: { "Authorization": `Bearer ${token}` } - }); - const data = await response.json(); - console.log(`Всего пользователей: ${data.users.length}`); -} - -// 2. Изменить роль пользователя -async function changeRole(userId, role) { - const response = await fetch(`${baseUrl}/api/users/${userId}/role`, { - method: "PUT", - headers: { - "Authorization": `Bearer ${token}`, - "Content-Type": "application/json" - }, - body: JSON.stringify({ role }) - }); - const data = await response.json(); - console.log(data.message); -} - -// 3. Выдать доступ к серверу -async function grantServerAccess(userId, serverName) { - const response = await fetch(`${baseUrl}/api/users/${userId}/access/servers`, { - method: "POST", - headers: { - "Authorization": `Bearer ${token}`, - "Content-Type": "application/json" - }, - body: JSON.stringify({ server_name: serverName }) - }); - const data = await response.json(); - console.log(data.message); -} - -// 4. Заблокировать пользователя -async function banUser(userId, reason) { - const response = await fetch(`${baseUrl}/api/users/${userId}/ban`, { - method: "POST", - headers: { - "Authorization": `Bearer ${token}`, - "Content-Type": "application/json" - }, - body: JSON.stringify({ reason }) - }); - const data = await response.json(); - console.log(data.message); -} - -// Использование -getUsers(); -changeRole(2, "admin"); -grantServerAccess(2, "Survival"); -banUser(2, "Нарушение правил"); -``` - ---- - -### cURL - -```bash -# Токен владельца -TOKEN="your_owner_token" -BASE_URL="http://localhost:8000" - -# 1. Получить список пользователей -curl -X GET "$BASE_URL/api/users" \ - -H "Authorization: Bearer $TOKEN" - -# 2. Изменить роль пользователя -curl -X PUT "$BASE_URL/api/users/2/role" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"role": "admin"}' - -# 3. Выдать доступ к серверу -curl -X POST "$BASE_URL/api/users/2/access/servers" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"server_name": "Survival"}' - -# 4. Забрать доступ к серверу -curl -X DELETE "$BASE_URL/api/users/2/access/servers/Survival" \ - -H "Authorization: Bearer $TOKEN" - -# 5. Заблокировать пользователя -curl -X POST "$BASE_URL/api/users/2/ban" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"reason": "Нарушение правил"}' - -# 6. Разблокировать пользователя -curl -X POST "$BASE_URL/api/users/2/unban" \ - -H "Authorization: Bearer $TOKEN" - -# 7. Удалить пользователя -curl -X DELETE "$BASE_URL/api/users/2" \ - -H "Authorization: Bearer $TOKEN" -``` - ---- - -## Миграция Существующих Пользователей - -### Автоматическая миграция - -При первом запуске обновлённой версии панели: - -1. Первый пользователь в `users.json` получает роль `owner` -2. Все пользователи с ролью `admin` остаются `admin` -3. Все остальные пользователи получают роль `user` -4. Всем пользователям добавляются права по умолчанию - -### Скрипт миграции - -```python -# backend/migrate_users.py -import json -from pathlib import Path - -def migrate_users(): - users_file = Path("users.json") - - if not users_file.exists(): - print("Файл users.json не найден") - return - - with open(users_file, "r", encoding="utf-8") as f: - users = json.load(f) - - if not users: - print("Нет пользователей для миграции") - return - - # Первый пользователь = owner - users[0]["role"] = "owner" - users[0]["permissions"] = { - "manage_users": True, - "manage_roles": True, - "manage_servers": True, - "manage_tickets": True, - "manage_files": True, - "delete_users": True, - "view_all_resources": True - } - - # Остальные пользователи - for user in users[1:]: - if "role" not in user: - user["role"] = "user" - - if "permissions" not in user: - if user["role"] == "admin": - user["permissions"] = { - "manage_users": True, - "manage_roles": False, - "manage_servers": True, - "manage_tickets": True, - "manage_files": True, - "delete_users": False, - "view_all_resources": True - } - else: - user["permissions"] = { - "manage_users": False, - "manage_roles": False, - "manage_servers": True, - "manage_tickets": True, - "manage_files": True, - "delete_users": False, - "view_all_resources": False - } - - if "resource_access" not in user: - user["resource_access"] = { - "servers": [], - "tickets": [], - "files": [] - } - - # Сохранить - with open(users_file, "w", encoding="utf-8") as f: - json.dump(users, f, indent=2, ensure_ascii=False) - - print(f"Миграция завершена! Обновлено пользователей: {len(users)}") - print(f"Владелец: {users[0]['username']}") - -if __name__ == "__main__": - migrate_users() -``` - -**Запуск миграции:** -```bash -cd backend -python migrate_users.py -``` - ---- - -## UI Компоненты - -### Панель управления пользователями - -В панели администратора добавлен раздел "Управление пользователями" (только для Owner): - -**Возможности:** -- Просмотр списка всех пользователей -- Изменение ролей -- Управление правами -- Выдача/отзыв доступа к ресурсам -- Блокировка/разблокировка -- Удаление пользователей - -**Компонент:** `frontend/src/components/UserManagement.jsx` - ---- - -## Безопасность - -### Проверка прав - -Все эндпоинты управления пользователями защищены: - -```python -def require_owner(current_user: dict): - if current_user["role"] != "owner": - raise HTTPException( - status_code=403, - detail="Требуется роль владельца" - ) - -def require_admin_or_owner(current_user: dict): - if current_user["role"] not in ["owner", "admin"]: - raise HTTPException( - status_code=403, - detail="Требуется роль администратора или владельца" - ) -``` - -### Логирование действий - -Все действия владельца логируются: - -```python -# Пример лога -{ - "timestamp": "2026-01-15T12:00:00Z", - "action": "change_role", - "owner": "Root", - "target_user": "User1", - "old_role": "user", - "new_role": "admin" -} -``` - ---- - -## FAQ - -### Можно ли иметь несколько владельцев? - -Нет, владелец может быть только один. Но владелец может назначить несколько администраторов. - -### Что делать, если владелец потерял доступ? - -Отредактируйте `backend/users.json` вручную и измените роль нужного пользователя на `owner`. - -### Может ли владелец удалить сам себя? - -Нет, владельца удалить нельзя. Сначала нужно передать роль владельца другому пользователю. - -### Как передать роль владельца? - -```bash -# Через API -curl -X PUT "http://localhost:8000/api/users/2/role" \ - -H "Authorization: Bearer $OWNER_TOKEN" \ - -H "Content-Type: application/json" \ - -d '{"role": "owner"}' -``` - -При передаче роли владельца, текущий владелец автоматически становится администратором. - ---- - -## Changelog - -### Версия 1.1.0 (15 января 2026) - -**Добавлено:** -- ✅ Роль владельца (Owner) -- ✅ Система прав и разрешений -- ✅ API для управления пользователями -- ✅ Управление доступом к ресурсам -- ✅ Блокировка/разблокировка пользователей -- ✅ Удаление пользователей -- ✅ UI компонент управления пользователями -- ✅ Скрипт миграции -- ✅ Логирование действий - -**Изменено:** -- Первый пользователь теперь получает роль `owner` вместо `admin` -- Добавлена проверка прав для всех эндпоинтов -- Обновлена структура пользователя в `users.json` - ---- - -**Версия:** 1.1.0 -**Дата:** 15 января 2026 - -**Полный контроль над панелью!** 👑 diff --git a/OWNER_UI_READY.md b/OWNER_UI_READY.md deleted file mode 100644 index ef29e58..0000000 --- a/OWNER_UI_READY.md +++ /dev/null @@ -1,297 +0,0 @@ -# ✅ UI Владельца готов! - -**Дата:** 15 января 2026 -**Статус:** ГОТОВО К ИСПОЛЬЗОВАНИЮ ✅ - ---- - -## 🎉 Что было сделано - -### 1. Frontend -- ✅ **UserManagement.jsx** - Компонент управления пользователями -- ✅ **App.jsx** - Добавлена кнопка "Управление" (жёлтая с иконкой щита) -- ✅ Модальное окно с полным UI - -### 2. Backend -- ✅ **8 новых API эндпоинтов** добавлены в `main.py`: - 1. `GET /api/users` - Список пользователей - 2. `PUT /api/users/{username}/role` - Изменить роль - 3. `POST /api/users/{username}/ban` - Заблокировать - 4. `POST /api/users/{username}/unban` - Разблокировать - 5. `DELETE /api/users/{username}` - Удалить - 6. `POST /api/users/{username}/access/servers` - Выдать доступ - 7. `DELETE /api/users/{username}/access/servers/{name}` - Забрать доступ - 8. `PUT /api/users/{username}/permissions` - Изменить права - -### 3. Инструменты -- ✅ **RESTART_ALL.bat** - Быстрый перезапуск всех сервисов - ---- - -## 🚀 Как запустить - -### Вариант 1: Автоматический перезапуск - -```bash -RESTART_ALL.bat -``` - -### Вариант 2: Вручную - -**Backend:** -```bash -cd backend -python main.py -``` - -**Frontend:** -```bash -cd frontend -npm run dev -``` - -### Вариант 3: Docker - -```bash -docker-compose restart -``` - ---- - -## 🎯 Как использовать - -### Шаг 1: Войдите как владелец - -- Логин: **Root** -- Пароль: **arkonsad123** - -### Шаг 2: Найдите кнопку "Управление" - -В верхней панели справа увидите **жёлтую кнопку** с иконкой щита и текстом "Управление" - -### Шаг 3: Управляйте пользователями - -В открывшемся окне вы увидите: - -**Список пользователей:** -- MihailPrud (User) -- arkonsad (User) -- Root (Owner) - это вы! - -**Для каждого пользователя (кроме себя):** -- 🔵 **Кнопка "Роль"** - Изменить роль (Owner, Admin, Support, User, Banned) -- 🟠 **Кнопка блокировки** - Заблокировать пользователя -- 🔴 **Кнопка удаления** - Удалить пользователя - ---- - -## 🎨 Что вы увидите - -### Карточка пользователя - -``` -┌─────────────────────────────────────────────────────┐ -│ 👤 MihailPrud [🔵 Роль] [🟠] [🔴] │ -│ Пользователь │ -│ 🖥️ 2 серверов │ -│ ✅ Управление серверами │ -│ ✅ Управление тикетами │ -│ ✅ Управление файлами │ -└─────────────────────────────────────────────────────┘ -``` - -### Модальное окно изменения роли - -``` -┌─────────────────────────────────┐ -│ Изменить роль: MihailPrud │ -├─────────────────────────────────┤ -│ [👑 Владелец] │ -│ Полный контроль над панелью │ -│ │ -│ [🛡️ Администратор] │ -│ Управление без изменения │ -│ ролей │ -│ │ -│ [💬 Поддержка] │ -│ Работа с тикетами │ -│ │ -│ [✅ Пользователь] ← Текущая │ -│ Базовые возможности │ -│ │ -│ [🚫 Заблокирован] │ -│ Доступ заблокирован │ -│ │ -│ [Отмена] │ -└─────────────────────────────────┘ -``` - ---- - -## 💡 Примеры использования - -### Сделать пользователя администратором - -1. Нажмите "Управление" -2. Найдите пользователя (например, MihailPrud) -3. Нажмите кнопку "Роль" -4. Выберите "Администратор" -5. Готово! Пользователь теперь админ - -### Заблокировать пользователя - -1. Нажмите "Управление" -2. Найдите пользователя -3. Нажмите оранжевую кнопку (Ban) -4. Подтвердите -5. Пользователь заблокирован - -### Разблокировать пользователя - -1. Найдите заблокированного пользователя (помечен 🚫) -2. Нажмите зелёную кнопку (UserCheck) -3. Пользователь разблокирован - -### Удалить пользователя - -1. Нажмите красную кнопку (Trash) -2. Подтвердите удаление -3. Пользователь удалён навсегда - ---- - -## 🔒 Ограничения безопасности - -### Что НЕЛЬЗЯ сделать: - -- ❌ Изменить свою роль -- ❌ Заблокировать себя -- ❌ Удалить себя -- ❌ Удалить владельца -- ❌ Заблокировать владельца - -### Что МОЖНО: - -- ✅ Изменить роль любого пользователя (кроме себя) -- ✅ Назначить нового владельца (вы станете админом) -- ✅ Заблокировать любого пользователя (кроме владельца) -- ✅ Удалить любого пользователя (кроме владельца) - ---- - -## 🎯 Роли и их возможности - -### 👑 Owner (Владелец) -- ✅ Управление пользователями -- ✅ Изменение ролей -- ✅ Удаление пользователей -- ✅ Управление серверами -- ✅ Просмотр всех ресурсов -- ✅ Все права - -### 🛡️ Admin (Администратор) -- ✅ Управление пользователями -- ✅ Управление серверами -- ✅ Просмотр всех ресурсов -- ❌ Изменение ролей -- ❌ Удаление пользователей - -### 💬 Support (Поддержка) -- ✅ Просмотр всех тикетов -- ✅ Ответ на тикеты -- ❌ Управление серверами -- ❌ Управление пользователями - -### ✅ User (Пользователь) -- ✅ Управление своими серверами -- ✅ Создание тикетов -- ✅ Управление своими файлами -- ❌ Просмотр чужих ресурсов - -### 🚫 Banned (Заблокирован) -- ❌ Нет доступа к панели -- ❌ Все права отозваны - ---- - -## 🐛 Troubleshooting - -### Не вижу кнопку "Управление" - -**Причина:** Вы не владелец - -**Решение:** -1. Проверьте что вошли как Root -2. Проверьте `backend/users.json` - у Root должна быть роль `owner` -3. Перезапустите панель - -### Кнопка есть, но ничего не происходит - -**Причина:** Backend не перезапущен - -**Решение:** -```bash -RESTART_ALL.bat -``` - -### Ошибка "Требуется роль владельца" - -**Причина:** В `users.json` роль не `owner` - -**Решение:** -1. Откройте `backend/users.json` -2. Найдите пользователя Root -3. Убедитесь что `"role": "owner"` -4. Перезапустите backend - -### Список пользователей пустой - -**Причина:** API не работает - -**Решение:** -1. Проверьте что backend запущен -2. Откройте консоль браузера (F12) -3. Проверьте ошибки -4. Перезапустите backend - ---- - -## 📊 Статистика - -### Добавлено в версии 1.1.0 - -- **Файлов:** 4 -- **Строк кода:** ~800 -- **API эндпоинтов:** 8 -- **Ролей:** 5 -- **Прав:** 7 - -### Всего в проекте - -- **Файлов:** 75+ -- **Строк кода:** ~10,300 -- **Строк документации:** ~7,500 -- **API эндпоинтов:** 45 -- **Компонентов React:** 16 - ---- - -## 🎉 Готово! - -Теперь у вас есть полноценная система управления пользователями! - -**Запустите:** -```bash -RESTART_ALL.bat -``` - -**Войдите как Root и нажмите жёлтую кнопку "Управление"!** - ---- - -**Версия:** 1.1.0 -**Дата:** 15 января 2026 -**Статус:** PRODUCTION READY ✅ - -**Полный контроль над панелью!** 👑🚀 - diff --git a/OWNER_VIEW_ALL.md b/OWNER_VIEW_ALL.md deleted file mode 100644 index 0ac3306..0000000 --- a/OWNER_VIEW_ALL.md +++ /dev/null @@ -1,274 +0,0 @@ -# 👑 Владелец видит все серверы - -**Дата:** 15 января 2026 -**Статус:** РЕАЛИЗОВАНО ✅ - ---- - -## 🎯 Что изменилось - -### До изменения - -**Проблема:** Владелец видел только серверы, к которым у него есть доступ в поле `servers` - -```json -{ - "Root": { - "role": "owner", - "servers": [] // Пустой список = нет серверов - } -} -``` - -**Результат:** Владелец не видел никаких серверов, даже будучи owner - ---- - -### После изменения - -**Решение:** Владелец и администратор видят ВСЕ серверы независимо от поля `servers` - -```python -# Новая логика в backend/main.py -can_view_all = user.get("role") in ["owner", "admin"] or \ - user.get("permissions", {}).get("view_all_resources", False) - -if not can_view_all and server_dir.name not in user.get("servers", []): - continue # Пропускаем сервер только для обычных пользователей -``` - -**Результат:** Владелец видит все серверы в системе! - ---- - -## 📊 Логика доступа к серверам - -### Кто видит какие серверы - -| Роль | Видит серверы | Логика | -|------|---------------|--------| -| **Owner** | ✅ ВСЕ серверы | `role == "owner"` | -| **Admin** | ✅ ВСЕ серверы | `role == "admin"` | -| **Support** | ❌ Только свои | Проверка `servers` | -| **User** | ❌ Только свои | Проверка `servers` | -| **Banned** | ❌ Ничего | Нет доступа | - -### Примеры - -#### Владелец (Root) -```json -{ - "username": "Root", - "role": "owner", - "servers": [] -} -``` -**Видит:** test, nya, 123, sdfsdf (все серверы в системе) - -#### Администратор -```json -{ - "username": "Admin1", - "role": "admin", - "servers": [] -} -``` -**Видит:** test, nya, 123, sdfsdf (все серверы в системе) - -#### Пользователь (MihailPrud) -```json -{ - "username": "MihailPrud", - "role": "user", - "servers": ["test", "nya"] -} -``` -**Видит:** test, nya (только свои серверы) - -#### Пользователь (arkonsad) -```json -{ - "username": "arkonsad", - "role": "user", - "servers": ["123", "sdfsdf"] -} -``` -**Видит:** 123, sdfsdf (только свои серверы) - ---- - -## 🎫 Логика доступа к тикетам - -### Кто видит какие тикеты - -| Роль | Видит тикеты | Логика | -|------|--------------|--------| -| **Owner** | ✅ ВСЕ тикеты | `role == "owner"` | -| **Admin** | ✅ ВСЕ тикеты | `role == "admin"` | -| **Support** | ✅ ВСЕ тикеты | `role == "support"` | -| **User** | ❌ Только свои | `author == username` | -| **Banned** | ❌ Ничего | Нет доступа | - -**Примечание:** Логика для тикетов уже была правильной, изменений не требовалось. - ---- - -## 🔐 Права доступа - -### view_all_resources - -Новое право `view_all_resources` определяет, может ли пользователь видеть все ресурсы: - -```json -{ - "permissions": { - "view_all_resources": true // Видит все серверы и тикеты - } -} -``` - -**Автоматически установлено для:** -- ✅ Owner - `true` -- ✅ Admin - `true` -- ❌ Support - `false` -- ❌ User - `false` -- ❌ Banned - `false` - ---- - -## 🚀 Как проверить - -### Шаг 1: Войдите как владелец - -``` -Логин: Root -Пароль: arkonsad123 -``` - -### Шаг 2: Проверьте список серверов - -Вы должны увидеть ВСЕ серверы: -- test (от MihailPrud) -- nya (от MihailPrud) -- 123 (от arkonsad) -- sdfsdf (от arkonsad) - -### Шаг 3: Проверьте тикеты - -Нажмите "Тикеты" - вы должны видеть все тикеты от всех пользователей. - ---- - -## 💡 Дополнительные возможности - -### Выдать доступ к серверу пользователю - -Теперь владелец может выдать доступ к любому серверу: - -1. Нажмите "Управление" -2. Найдите пользователя -3. Нажмите "Доступ к серверам" (если добавить эту кнопку) -4. Выберите сервер -5. Пользователь получит доступ - -**API:** -```bash -POST /api/users/{username}/access/servers -{ - "server_name": "test" -} -``` - -### Забрать доступ к серверу - -```bash -DELETE /api/users/{username}/access/servers/test -``` - ---- - -## 🔧 Технические детали - -### Изменённый код - -**Файл:** `backend/main.py` - -**Эндпоинт:** `GET /api/servers` - -**Было:** -```python -if user["role"] != "admin" and server_dir.name not in user.get("servers", []): - continue -``` - -**Стало:** -```python -can_view_all = user.get("role") in ["owner", "admin"] or \ - user.get("permissions", {}).get("view_all_resources", False) - -if not can_view_all and server_dir.name not in user.get("servers", []): - continue -``` - -**Изменения:** -1. ✅ Добавлена проверка роли `owner` -2. ✅ Добавлена проверка права `view_all_resources` -3. ✅ Улучшено логирование (показывает роль пользователя) - ---- - -## 📊 Сравнение - -### До изменения - -``` -Root (owner) → servers: [] → Видит: 0 серверов ❌ -Admin (admin) → servers: [] → Видит: 4 сервера ✅ -User (user) → servers: ["test"] → Видит: 1 сервер ✅ -``` - -### После изменения - -``` -Root (owner) → servers: [] → Видит: 4 сервера ✅ -Admin (admin) → servers: [] → Видит: 4 сервера ✅ -User (user) → servers: ["test"] → Видит: 1 сервер ✅ -``` - ---- - -## 🎯 Итог - -**Проблема решена!** ✅ - -Теперь владелец (и администратор) видят все серверы в системе, независимо от поля `servers` в их профиле. - -### Что работает: - -- ✅ Владелец видит все серверы -- ✅ Администратор видит все серверы -- ✅ Владелец видит все тикеты -- ✅ Администратор видит все тикеты -- ✅ Support видит все тикеты -- ✅ Пользователи видят только свои ресурсы - -### Перезапустите панель: - -```bash -RESTART_ALL.bat -``` - -Или вручную: -```bash -cd backend -python main.py -``` - ---- - -**Версия:** 1.1.0 -**Дата:** 15 января 2026 -**Статус:** РАБОТАЕТ ✅ - -**Полный контроль над всеми серверами!** 👑🖥️ - diff --git a/VERSION_1.1.0.md b/VERSION_1.1.0.md deleted file mode 100644 index 2cd5c99..0000000 --- a/VERSION_1.1.0.md +++ /dev/null @@ -1,427 +0,0 @@ -# 🎉 MC Panel v1.1.0 - Система прав и ролей - -**Дата релиза:** 15 января 2026 -**Тип релиза:** Minor Update -**Статус:** RELEASED ✅ - ---- - -## 📋 Что нового? - -### 👑 Роль владельца (Owner) - -Добавлена новая роль **Владелец** с полным контролем над панелью: - -- ✅ Управление всеми пользователями -- ✅ Изменение ролей -- ✅ Управление правами доступа -- ✅ Удаление пользователей -- ✅ Блокировка/разблокировка -- ✅ Выдача/отзыв доступа к ресурсам - -**Первый зарегистрированный пользователь автоматически становится владельцем!** - ---- - -### 🔐 Система прав - -Детальная система управления правами пользователей: - -**7 типов прав:** -1. `manage_users` - Управление пользователями -2. `manage_roles` - Изменение ролей (только Owner) -3. `manage_servers` - Управление серверами -4. `manage_tickets` - Управление тикетами -5. `manage_files` - Управление файлами -6. `delete_users` - Удаление пользователей (только Owner) -7. `view_all_resources` - Просмотр всех ресурсов - ---- - -### 👥 5 ролей пользователей - -``` -Owner (Владелец) - Полный контроль - ↓ -Admin (Администратор) - Управление панелью - ↓ -Support (Поддержка) - Работа с тикетами - ↓ -User (Пользователь) - Базовые возможности - ↓ -Banned (Заблокирован) - Нет доступа -``` - ---- - -### 🆕 Новые API эндпоинты - -#### 1. Управление пользователями -```http -GET /api/users -``` -Получить список всех пользователей (Owner/Admin) - -#### 2. Изменение роли -```http -PUT /api/users/{user_id}/role -``` -Изменить роль пользователя (только Owner) - -#### 3. Управление правами -```http -PUT /api/users/{user_id}/permissions -``` -Изменить права пользователя (только Owner) - -#### 4. Доступ к серверам -```http -POST /api/users/{user_id}/access/servers -DELETE /api/users/{user_id}/access/servers/{server_name} -``` -Выдать/забрать доступ к серверу (Owner/Admin) - -#### 5. Блокировка -```http -POST /api/users/{user_id}/ban -POST /api/users/{user_id}/unban -``` -Заблокировать/разблокировать пользователя (Owner/Admin) - -#### 6. Удаление -```http -DELETE /api/users/{user_id} -``` -Удалить пользователя (только Owner) - ---- - -### 🛠️ Инструменты миграции - -#### migrate_users.py -Автоматический скрипт миграции существующих пользователей: - -```bash -cd backend -python migrate_users.py -``` - -**Что делает:** -- ✅ Создаёт backup users.json -- ✅ Назначает первого пользователя владельцем -- ✅ Добавляет права всем пользователям -- ✅ Добавляет систему доступа к ресурсам -- ✅ Показывает результат миграции - -#### MIGRATE_USERS.bat -Bat файл для Windows: - -```bash -MIGRATE_USERS.bat -``` - ---- - -### 📚 Новая документация - -#### OWNER_PERMISSIONS.md (~500 строк) -Полная документация системы прав: - -- Обзор системы -- Роли и возможности -- API эндпоинты -- Примеры использования (Python, JavaScript, cURL) -- Миграция пользователей -- FAQ - -#### CHANGELOG.md -История всех изменений проекта: - -- Версия 1.1.0 - Система прав -- Версия 1.0.0 - Первый релиз - ---- - -## 🔄 Изменения - -### Backend - -**Структура пользователя:** -```json -{ - "username": "example", - "role": "user", - "permissions": { - "manage_users": false, - "manage_roles": false, - "manage_servers": true, - "manage_tickets": true, - "manage_files": true, - "delete_users": false, - "view_all_resources": false - }, - "resource_access": { - "servers": ["server1"], - "tickets": ["ticket1"], - "files": ["server1/*"] - } -} -``` - -**Проверка прав:** -```python -def require_owner(current_user: dict): - if current_user["role"] != "owner": - raise HTTPException(status_code=403) - -def require_admin_or_owner(current_user: dict): - if current_user["role"] not in ["owner", "admin"]: - raise HTTPException(status_code=403) -``` - ---- - -## 📊 Сравнение версий - -| Функция | v1.0.0 | v1.1.0 | -|---------|--------|--------| -| Роли | 2 (admin, user) | 5 (owner, admin, support, user, banned) | -| Система прав | ❌ | ✅ 7 типов прав | -| Управление пользователями | Базовое | Расширенное | -| Блокировка пользователей | ❌ | ✅ | -| Удаление пользователей | ❌ | ✅ (только Owner) | -| Доступ к ресурсам | Все или ничего | Детальный контроль | -| API эндпоинтов | 37 | 45 (+8) | - ---- - -## 🚀 Обновление с v1.0.0 - -### Шаг 1: Backup - -```bash -# Создайте backup -BACKUP_DATA.bat -``` - -### Шаг 2: Обновление кода - -```bash -# Остановите панель -STOP_DOCKER.bat - -# Обновите код -git pull origin main - -# Или скачайте новую версию -``` - -### Шаг 3: Миграция пользователей - -```bash -# Запустите миграцию -MIGRATE_USERS.bat - -# Или вручную -cd backend -python migrate_users.py -``` - -### Шаг 4: Перезапуск - -```bash -# Запустите панель -START_DOCKER.bat - -# Или -docker-compose up -d --build -``` - -### Шаг 5: Проверка - -1. Войдите как владелец -2. Проверьте права пользователей -3. Настройте доступ к ресурсам - ---- - -## 💡 Примеры использования - -### Python - -```python -import requests - -token = "owner_token" -headers = {"Authorization": f"Bearer {token}"} -base_url = "http://localhost:8000" - -# Получить пользователей -users = requests.get(f"{base_url}/api/users", headers=headers).json() - -# Изменить роль -requests.put( - f"{base_url}/api/users/2/role", - headers=headers, - json={"role": "admin"} -) - -# Выдать доступ к серверу -requests.post( - f"{base_url}/api/users/2/access/servers", - headers=headers, - json={"server_name": "Survival"} -) - -# Заблокировать пользователя -requests.post( - f"{base_url}/api/users/2/ban", - headers=headers, - json={"reason": "Нарушение правил"} -) -``` - -### JavaScript - -```javascript -const token = "owner_token"; -const baseUrl = "http://localhost:8000"; - -// Получить пользователей -const users = await fetch(`${baseUrl}/api/users`, { - headers: { "Authorization": `Bearer ${token}` } -}).then(r => r.json()); - -// Изменить роль -await fetch(`${baseUrl}/api/users/2/role`, { - method: "PUT", - headers: { - "Authorization": `Bearer ${token}`, - "Content-Type": "application/json" - }, - body: JSON.stringify({ role: "admin" }) -}); -``` - ---- - -## 🔒 Безопасность - -### Новые меры безопасности - -- ✅ Проверка прав на всех административных эндпоинтах -- ✅ Логирование действий владельца -- ✅ Защита от удаления владельца -- ✅ Автоматическое понижение роли при передаче прав -- ✅ Детальный контроль доступа к ресурсам - -### Рекомендации - -1. Регулярно проверяйте права пользователей -2. Используйте роль Support для службы поддержки -3. Блокируйте неактивных пользователей -4. Логируйте все административные действия -5. Создавайте backup перед изменением прав - ---- - -## 📝 Миграция данных - -### Автоматическая миграция - -При запуске `migrate_users.py`: - -1. ✅ Создаётся backup с timestamp -2. ✅ Первый пользователь → Owner -3. ✅ Admin остаются Admin -4. ✅ Остальные → User -5. ✅ Всем добавляются права -6. ✅ Добавляется система доступа к ресурсам - -### Ручная миграция - -Если нужно вручную: - -```json -{ - "username": "Root", - "password": "hashed_password", - "role": "owner", - "permissions": { - "manage_users": true, - "manage_roles": true, - "manage_servers": true, - "manage_tickets": true, - "manage_files": true, - "delete_users": true, - "view_all_resources": true - }, - "resource_access": { - "servers": [], - "tickets": [], - "files": [] - } -} -``` - ---- - -## 🐛 Известные проблемы - -### Нет критических проблем - -Все функции протестированы и работают корректно. - -### Ограничения - -- Может быть только один владелец -- Владельца нельзя удалить -- Передача прав владельца понижает текущего владельца до admin - ---- - -## 📞 Поддержка - -### Документация - -- [OWNER_PERMISSIONS.md](OWNER_PERMISSIONS.md) - Система прав -- [CHANGELOG.md](CHANGELOG.md) - История изменений -- [API.md](API.md) - API документация -- [FAQ.md](FAQ.md) - Часто задаваемые вопросы - -### Проблемы с миграцией? - -1. Проверьте backup файл -2. Читайте вывод скрипта миграции -3. Проверьте формат users.json -4. Восстановите из backup если нужно - ---- - -## 🎯 Что дальше? - -### Планы на v1.2.0 - -- [ ] UI компонент управления пользователями -- [ ] Логи действий администраторов -- [ ] Экспорт/импорт пользователей -- [ ] Групповое управление правами -- [ ] История изменений прав -- [ ] Email уведомления о изменении прав - ---- - -## 🙏 Благодарности - -Спасибо за использование MC Panel! - -Эта версия добавляет мощную систему управления пользователями, которая даёт полный контроль над панелью. - ---- - -**Версия:** 1.1.0 -**Дата:** 15 января 2026 -**Статус:** RELEASED ✅ - -**Полный контроль над панелью!** 👑🚀 - diff --git a/ВЕРСИЯ_1.1.0_INFO.md b/ВЕРСИЯ_1.1.0_INFO.md deleted file mode 100644 index f271677..0000000 --- a/ВЕРСИЯ_1.1.0_INFO.md +++ /dev/null @@ -1,328 +0,0 @@ -# ✅ Версия 1.1.0 готова! - -**Дата:** 15 января 2026 -**Статус:** ЗАВЕРШЕНО ✅ - ---- - -## 🎉 Что было добавлено - -### 👑 Система прав и ролей - -**Создано файлов:** 5 -**Написано строк:** ~1,500 - -#### 1. OWNER_PERMISSIONS.md (~500 строк) -Полная документация системы прав: -- Обзор системы -- 5 ролей пользователей -- 7 типов прав -- 8 новых API эндпоинтов -- Примеры на Python, JavaScript, cURL -- Инструкции по миграции -- FAQ - -#### 2. backend/migrate_users.py (~200 строк) -Скрипт автоматической миграции: -- Создание backup -- Назначение владельца -- Добавление прав -- Добавление доступа к ресурсам -- Показ результата - -#### 3. MIGRATE_USERS.bat (~50 строк) -Bat файл для Windows: -- Проверка Python -- Проверка users.json -- Запуск миграции -- Показ результата - -#### 4. CHANGELOG.md (~300 строк) -История изменений: -- Версия 1.1.0 -- Версия 1.0.0 -- Детальное описание -- Типы изменений - -#### 5. VERSION_1.1.0.md (~400 строк) -Обзор релиза: -- Что нового -- Новые API -- Инструменты -- Примеры -- Миграция - ---- - -## 📊 Статистика - -### Новые возможности - -**Роли:** 2 → 5 -- Owner (новая) -- Admin -- Support (новая) -- User -- Banned (новая) - -**Права:** 0 → 7 -1. manage_users -2. manage_roles -3. manage_servers -4. manage_tickets -5. manage_files -6. delete_users -7. view_all_resources - -**API эндпоинты:** 37 → 45 (+8) -- GET /api/users -- PUT /api/users/{id}/role -- PUT /api/users/{id}/permissions -- POST /api/users/{id}/access/servers -- DELETE /api/users/{id}/access/servers/{name} -- DELETE /api/users/{id} -- POST /api/users/{id}/ban -- POST /api/users/{id}/unban - ---- - -## 🎯 Основные возможности - -### Для владельца (Owner) - -✅ Управление всеми пользователями -✅ Изменение ролей -✅ Управление правами -✅ Выдача/отзыв доступа к ресурсам -✅ Блокировка/разблокировка -✅ Удаление пользователей -✅ Просмотр всех ресурсов - -### Для администратора (Admin) - -✅ Управление пользователями -✅ Управление серверами -✅ Просмотр всех тикетов -✅ Блокировка пользователей -❌ Изменение ролей -❌ Удаление пользователей - -### Для поддержки (Support) - -✅ Просмотр всех тикетов -✅ Ответ на тикеты -✅ Изменение статуса тикетов -❌ Управление серверами -❌ Управление пользователями - -### Для пользователя (User) - -✅ Управление своими серверами -✅ Создание тикетов -✅ Управление своими файлами -❌ Просмотр чужих ресурсов -❌ Управление пользователями - ---- - -## 🔄 Миграция - -### Автоматическая - -```bash -# Windows -MIGRATE_USERS.bat - -# Linux/Mac -cd backend -python migrate_users.py -``` - -### Что происходит - -1. ✅ Создаётся backup users.json -2. ✅ Первый пользователь → Owner -3. ✅ Admin остаются Admin -4. ✅ Остальные → User -5. ✅ Всем добавляются права -6. ✅ Добавляется доступ к ресурсам - ---- - -## 📚 Документация - -### Обновлено - -- ✅ README.md - Добавлены ссылки на новые файлы -- ✅ Версия проекта: 1.0.0 → 1.1.0 - -### Создано - -- ✅ OWNER_PERMISSIONS.md (~500 строк) -- ✅ CHANGELOG.md (~300 строк) -- ✅ VERSION_1.1.0.md (~400 строк) -- ✅ ВЕРСИЯ_1.1.0_ГОТОВА.md (этот файл) - -**Итого новой документации:** ~1,200 строк - ---- - -## 🚀 Как использовать - -### 1. Обновление с v1.0.0 - -```bash -# Backup -BACKUP_DATA.bat - -# Остановка -STOP_DOCKER.bat - -# Обновление кода -git pull origin main - -# Миграция -MIGRATE_USERS.bat - -# Запуск -START_DOCKER.bat -``` - -### 2. Первый запуск v1.1.0 - -```bash -# Запуск -START_DOCKER.bat - -# Регистрация -# Первый пользователь = Owner! - -# Создание пользователей -# Через API или UI -``` - -### 3. Управление пользователями - -```python -import requests - -token = "owner_token" -base_url = "http://localhost:8000" -headers = {"Authorization": f"Bearer {token}"} - -# Получить пользователей -users = requests.get(f"{base_url}/api/users", headers=headers) - -# Изменить роль -requests.put( - f"{base_url}/api/users/2/role", - headers=headers, - json={"role": "admin"} -) - -# Выдать доступ -requests.post( - f"{base_url}/api/users/2/access/servers", - headers=headers, - json={"server_name": "Survival"} -) -``` - ---- - -## 🔒 Безопасность - -### Новые меры - -- ✅ Проверка прав на всех эндпоинтах -- ✅ Логирование действий владельца -- ✅ Защита от удаления владельца -- ✅ Детальный контроль доступа - -### Рекомендации - -1. Регулярно проверяйте права -2. Используйте роль Support для поддержки -3. Блокируйте неактивных пользователей -4. Создавайте backup перед изменениями - ---- - -## 📊 Сравнение версий - -| Параметр | v1.0.0 | v1.1.0 | -|----------|--------|--------| -| Ролей | 2 | 5 | -| Прав | 0 | 7 | -| API | 37 | 45 | -| Файлов | 65+ | 70+ | -| Строк кода | ~9,300 | ~9,500 | -| Строк документации | ~6,000 | ~7,200 | - ---- - -## 🎯 Что дальше? - -### Планы на v1.2.0 - -- [ ] UI компонент управления пользователями -- [ ] Логи действий администраторов -- [ ] Экспорт/импорт пользователей -- [ ] Групповое управление правами -- [ ] История изменений прав -- [ ] Email уведомления - ---- - -## ✅ Checklist - -### Код -- [x] Скрипт миграции создан -- [x] Bat файл создан -- [x] Проверка прав добавлена -- [x] API эндпоинты работают - -### Документация -- [x] OWNER_PERMISSIONS.md создан -- [x] CHANGELOG.md создан -- [x] VERSION_1.1.0.md создан -- [x] README.md обновлён -- [x] Версия обновлена - -### Тестирование -- [x] Миграция протестирована -- [x] API эндпоинты протестированы -- [x] Права проверены -- [x] Backup работает - ---- - -## 🏆 Итог - -**Версия 1.1.0 полностью готова!** - -### Добавлено: -- ✅ 5 ролей пользователей -- ✅ 7 типов прав -- ✅ 8 новых API эндпоинтов -- ✅ Инструменты миграции -- ✅ ~1,500 строк нового кода и документации - -### Обновлено: -- ✅ README.md -- ✅ Версия проекта -- ✅ Структура пользователя - -### Протестировано: -- ✅ Миграция работает -- ✅ API работает -- ✅ Права работают - ---- - -**Версия:** 1.1.0 -**Дата:** 15 января 2026 -**Статус:** ГОТОВО К ИСПОЛЬЗОВАНИЮ ✅ - -**Полный контроль над панелью!** 👑🚀 - diff --git a/ГОТОВО.md b/ГОТОВО.md deleted file mode 100644 index 55cdc55..0000000 --- a/ГОТОВО.md +++ /dev/null @@ -1,225 +0,0 @@ -# ✅ Документация объединена! - -## Что было сделано - -### 📚 Создано 3 основных файла: - -#### 1. **README.md** - Главная страница -Навигация по всей документации с кратким описанием проекта. - -**Содержит:** -- Ссылки на всю документацию -- Быстрый старт -- Основные возможности -- Структура проекта -- Информация о поддержке - -**Начните отсюда!** 👈 - ---- - -#### 2. **ДОКУМЕНТАЦИЯ.md** - Полная документация проекта -Вся документация проекта в одном файле (кроме API). - -**Разделы:** -1. О проекте -2. Быстрый старт -3. Установка и настройка -4. Функциональность -5. Система уведомлений -6. Дизайн и темы -7. Файловый менеджер -8. Система тикетов -9. Личный кабинет -10. OpenID Connect -11. Роли пользователей -12. Безопасность -13. Troubleshooting -14. Дополнительная информация -15. Changelog - -**Объем:** ~500 строк - ---- - -#### 3. **API.md** - API документация -Вся API документация в одном файле. - -**Разделы:** -1. Базовая информация -2. Быстрый старт -3. Аутентификация (3 эндпоинта) -4. Управление пользователями (4 эндпоинта) -5. Личный кабинет (4 эндпоинта) -6. Управление серверами (10 эндпоинтов) -7. Управление файлами (9 эндпоинтов) -8. Тикеты (5 эндпоинтов) -9. OpenID Connect (3 эндпоинта) -10. Коды ошибок -11. Примеры интеграции (Python, JavaScript, cURL) -12. Postman коллекция - -**Всего эндпоинтов:** 37 -**Объем:** ~300 строк - ---- - -### 🗑️ Удалено 8 старых файлов: - -- ❌ API_README.md -- ❌ API_QUICK_REFERENCE.md -- ❌ API_ДОКУМЕНТАЦИЯ.md -- ❌ API_DOCUMENTATION.md -- ❌ ДОКУМЕНТАЦИЯ_ГОТОВА.md -- ❌ СИСТЕМА_УВЕДОМЛЕНИЙ.md -- ❌ УВЕДОМЛЕНИЯ_ТИКЕТОВ.md -- ❌ ОБНОВЛЕНИЕ_УВЕДОМЛЕНИЙ.md - ---- - -### 📦 Сохранено: - -- ✅ **MC_Panel_API.postman_collection.json** - Postman коллекция -- ✅ Все остальные технические .md файлы (история разработки) - ---- - -## 📊 Статистика - -### Было: -- 📄 12+ разрозненных .md файлов -- 🔀 Дублирование информации -- 😕 Сложная навигация - -### Стало: -- 📄 3 основных файла -- ✨ Вся информация структурирована -- 🎯 Простая навигация -- 📖 Легко найти нужное - ---- - -## 🎯 Структура документации - -``` -MC Panel/ -├── README.md # 👈 Начните здесь! -│ ├── Навигация -│ ├── Быстрый старт -│ └── Ссылки на документацию -│ -├── ДОКУМЕНТАЦИЯ.md # Полная документация -│ ├── О проекте -│ ├── Установка -│ ├── Функциональность -│ ├── Система уведомлений -│ ├── Файловый менеджер -│ ├── Тикеты -│ ├── Личный кабинет -│ ├── OpenID Connect -│ ├── Роли -│ ├── Безопасность -│ └── Troubleshooting -│ -├── API.md # API документация -│ ├── Все эндпоинты (37) -│ ├── Примеры запросов -│ ├── Коды ошибок -│ └── Интеграция (Python, JS, cURL) -│ -└── MC_Panel_API.postman_collection.json # Postman коллекция -``` - ---- - -## 🚀 Как использовать - -### Для пользователей: -1. Откройте **README.md** для обзора -2. Читайте **ДОКУМЕНТАЦИЯ.md** для изучения функций -3. Используйте **Troubleshooting** при проблемах - -### Для разработчиков: -1. Откройте **README.md** для обзора -2. Читайте **API.md** для интеграции -3. Импортируйте **Postman коллекцию** для тестирования - -### Для администраторов: -1. Читайте **ДОКУМЕНТАЦИЯ.md** → Установка и настройка -2. Изучите раздел **Безопасность** -3. Настройте **OpenID Connect** - ---- - -## ✨ Преимущества новой структуры - -### 1. Простота -- Всего 3 файла вместо 12+ -- Легко найти нужную информацию -- Понятная навигация - -### 2. Полнота -- Вся информация в одном месте -- Нет дублирования -- Актуальные данные - -### 3. Удобство -- README с навигацией -- Разделение проект/API -- Быстрый поиск (Ctrl+F) - -### 4. Поддержка -- Легко обновлять -- Легко добавлять новое -- Легко переводить - ---- - -## 📝 Что включено - -### ДОКУМЕНТАЦИЯ.md содержит: -- ✅ Быстрый старт -- ✅ Полная установка -- ✅ Все функции проекта -- ✅ Система уведомлений (полное описание) -- ✅ Дизайн и темы (6 тем) -- ✅ Файловый менеджер (все операции) -- ✅ Система тикетов (с уведомлениями) -- ✅ Личный кабинет -- ✅ OpenID Connect (ZITADEL) -- ✅ Роли пользователей (4 роли) -- ✅ Безопасность (рекомендации) -- ✅ Troubleshooting (решение проблем) -- ✅ Структура БД -- ✅ Горячие клавиши -- ✅ Советы и трюки -- ✅ Roadmap -- ✅ Changelog - -### API.md содержит: -- ✅ Все 37 эндпоинтов -- ✅ Примеры запросов/ответов -- ✅ Коды ошибок -- ✅ Примеры интеграции: - - Python (класс MCPanelAPI) - - JavaScript (класс MCPanelAPI) - - cURL (готовые команды) -- ✅ Postman коллекция (описание) -- ✅ Безопасность API -- ✅ Лимиты и ограничения -- ✅ Changelog - ---- - -## 🎉 Готово к использованию! - -Вся документация объединена и структурирована. - -**Начните с файла README.md** для навигации по документации. - ---- - -**Дата создания:** 15 января 2026 -**Версия:** 1.0.0 - -**Приятного использования MC Panel!** 🎮 diff --git a/ДОКУМЕНТАЦИЯ.md b/ДОКУМЕНТАЦИЯ.md deleted file mode 100644 index 02680d5..0000000 --- a/ДОКУМЕНТАЦИЯ.md +++ /dev/null @@ -1,998 +0,0 @@ -# MC Panel - Полная документация проекта - -**Версия:** 1.0.0 -**Дата:** 15 января 2026 - ---- - -## 📋 Содержание - -1. [О проекте](#о-проекте) -2. [Быстрый старт](#быстрый-старт) -3. [Установка и настройка](#установка-и-настройка) -4. [Функциональность](#функциональность) -5. [Система уведомлений](#система-уведомлений) -6. [Дизайн и темы](#дизайн-и-темы) -7. [Файловый менеджер](#файловый-менеджер) -8. [Система тикетов](#система-тикетов) -9. [Личный кабинет](#личный-кабинет) -10. [OpenID Connect](#openid-connect) -11. [Роли пользователей](#роли-пользователей) -12. [Безопасность](#безопасность) -13. [Troubleshooting](#troubleshooting) - ---- - -## О проекте - -MC Panel - это современная веб-панель для управления Minecraft серверами с полным набором функций. - -### Основные возможности - -- 🖥️ **Управление серверами** - запуск, остановка, мониторинг -- 📁 **Файловый менеджер** - полное управление файлами сервера -- 💬 **Консоль** - отправка команд и просмотр логов в реальном времени -- 📊 **Статистика** - мониторинг CPU, RAM, диска -- 🎫 **Система тикетов** - поддержка пользователей -- 👥 **Управление пользователями** - роли и права доступа -- 🔐 **OpenID Connect** - интеграция с ZITADEL -- 🎨 **6 тем оформления** - включая современную темную тему -- 🔔 **Система уведомлений** - информирование о всех событиях -- 👤 **Личный кабинет** - управление профилем и статистика - -### Технологии - -**Backend:** -- FastAPI (Python) -- JWT аутентификация -- WebSocket для консоли -- Authlib для OpenID Connect - -**Frontend:** -- React 18 -- Tailwind CSS -- Axios для API запросов -- Lucide React для иконок - ---- - -## Быстрый старт - -### Шаг 1: Установка зависимостей - -**Backend:** -```bash -cd backend -pip install -r requirements.txt -``` - -**Frontend:** -```bash -cd frontend -npm install -``` - -### Шаг 2: Настройка окружения - -Создайте файл `.env` в корне проекта: - -```env -# ZITADEL OpenID Connect -ZITADEL_ISSUER=https://your-instance.zitadel.cloud -ZITADEL_CLIENT_ID=your_client_id -ZITADEL_CLIENT_SECRET=your_client_secret - -# URLs -BASE_URL=http://localhost:8000 -FRONTEND_URL=http://localhost:3000 -``` - -### Шаг 3: Запуск - -**Backend:** -```bash -cd backend -python main.py -``` -Сервер запустится на `http://localhost:8000` - -**Frontend:** -```bash -cd frontend -npm run dev -``` -Интерфейс будет доступен на `http://localhost:3000` - -### Шаг 4: Первый вход - -1. Откройте `http://localhost:3000` -2. Зарегистрируйтесь (первый пользователь получит роль admin) -3. Создайте свой первый сервер -4. Загрузите server.jar в папку сервера -5. Запустите сервер! - -**Учетные данные по умолчанию:** -- Логин: `Root` -- Пароль: `Admin` - ---- - -## Установка и настройка - -### Требования - -- Python 3.8+ -- Node.js 16+ -- npm или yarn -- Git - -### Полная установка - -#### 1. Клонирование репозитория -```bash -git clone -cd mc-panel -``` - -#### 2. Установка Backend - -```bash -cd backend -pip install -r requirements.txt -``` - -**Зависимости:** -- fastapi - веб-фреймворк -- uvicorn - ASGI сервер -- python-jose - JWT токены -- passlib - хеширование паролей -- python-multipart - загрузка файлов -- psutil - мониторинг системы -- authlib - OpenID Connect -- httpx - HTTP клиент -- python-dotenv - переменные окружения - -#### 3. Установка Frontend - -```bash -cd frontend -npm install -``` - -**Зависимости:** -- react - UI библиотека -- react-dom - рендеринг React -- axios - HTTP клиент -- lucide-react - иконки -- tailwindcss - CSS фреймворк - -#### 4. Настройка ZITADEL (опционально) - -Если хотите использовать OpenID Connect: - -1. Создайте аккаунт на [ZITADEL](https://zitadel.com) -2. Создайте новое приложение (Application) -3. Выберите тип "Web" -4. Настройте Redirect URIs: - - `http://localhost:8000/api/auth/oidc/zitadel/callback` -5. Скопируйте Client ID и Client Secret -6. Добавьте в `.env` файл - -#### 5. Структура проекта - -``` -mc-panel/ -├── backend/ -│ ├── main.py # Главный файл FastAPI -│ ├── oidc_config.py # Конфигурация OpenID Connect -│ ├── requirements.txt # Python зависимости -│ ├── users.json # База пользователей -│ ├── tickets.json # База тикетов -│ └── servers/ # Папка с серверами -├── frontend/ -│ ├── src/ -│ │ ├── App.jsx # Главный компонент -│ │ ├── components/ # React компоненты -│ │ ├── themes.js # Темы оформления -│ │ └── config.js # Конфигурация -│ ├── package.json # npm зависимости -│ └── vite.config.js # Конфигурация Vite -├── .env # Переменные окружения -└── ДОКУМЕНТАЦИЯ.md # Этот файл -``` - ---- - -## Функциональность - -### Управление серверами - -#### Создание сервера -1. Нажмите кнопку "+" в боковой панели -2. Заполните форму: - - **Имя папки** - только латиница, цифры, _ и - - - **Отображаемое имя** - любое название - - **Команда запуска** - команда для запуска сервера -3. Нажмите "Создать" - -#### Запуск и остановка -- **Запустить** - зеленая кнопка "Запустить" -- **Остановить** - серая кнопка "Сброс" -- Статус отображается цветным индикатором - -#### Консоль -- Просмотр логов в реальном времени -- Отправка команд серверу -- Цветная подсветка: - - 🟢 INFO - зеленый - - 🟡 WARN - желтый - - 🔴 ERROR - красный - - ⚪ Время - серый - -#### Статистика -- **CPU** - использование процессора (%) -- **RAM** - использование памяти (МБ) -- **Disk** - размер файлов сервера (МБ) -- Обновление каждые 5 секунд - -#### Настройки -- Изменение отображаемого имени -- Изменение команды запуска -- Удаление сервера (только админ) - ---- - -## Система уведомлений - -### Описание -Полноценная система уведомлений с автоматическим исчезновением через 5 секунд. - -### Типы уведомлений -- 🟢 **Success** - успешные операции -- 🔴 **Error** - ошибки -- 🟡 **Warning** - предупреждения -- 🔵 **Info** - информационные сообщения - -### Где используются - -#### Управление серверами -- ✅ Сервер запущен -- ℹ️ Сервер остановлен -- ❌ Ошибки запуска/остановки - -#### Файловый менеджер -- ✅ Файл/папка создан(а) -- ✅ Файл загружен/удален/сохранен -- ✅ Файл переименован/перемещен -- ❌ Ошибки операций - -#### Тикеты -- ✅ Тикет создан -- ✅ Сообщение отправлено -- ℹ️ Новое сообщение (от других, каждые 3 сек) -- ✅ Статус изменён (действие) -- ℹ️ Статус изменён (просмотр) -- ❌ Ошибки - -**Особенности тикетов:** -- Автообновление каждые 3 секунды -- Превью сообщений (50 символов) -- Не показываются для собственных действий - -#### Личный кабинет -- ✅ Имя изменено -- ✅ Пароль изменён -- ❌ Ошибки - -#### Создание сервера -- ✅ Сервер создан -- ❌ Ошибка создания - -### Технические детали - -**Компонент:** `frontend/src/components/NotificationSystem.jsx` - -**Использование:** -```javascript -import { notify } from './components/NotificationSystem'; - -notify('success', 'Заголовок', 'Сообщение'); -notify('error', 'Ошибка', 'Описание'); -notify('warning', 'Внимание', 'Предупреждение'); -notify('info', 'Информация', 'Сообщение'); -``` - -**Анимация:** slide-in-right (0.3 сек) - ---- - -## Дизайн и темы - -### Доступные темы - -1. **Modern (Современная)** - по умолчанию - - Цвета: #0f1115, #1a1d24, #23262e - - Акцент: зеленый - - Градиент: зеленый → изумрудный - -2. **Dark (Тёмная)** - - Цвета: черный, темно-серый - - Акцент: синий - - Градиент: синий → фиолетовый - -3. **Light (Светлая)** - - Цвета: белый, светло-серый - - Акцент: синий - - Градиент: синий → фиолетовый - -4. **Purple (Фиолетовая)** - - Цвета: темный с фиолетовым оттенком - - Акцент: фиолетовый - - Градиент: фиолетовый → розовый - -5. **Blue (Синяя)** - - Цвета: темный с синим оттенком - - Акцент: синий - - Градиент: голубой → синий - -6. **Green (Зелёная)** - - Цвета: темный с зеленым оттенком - - Акцент: зеленый - - Градиент: изумрудный → зеленый - -### Переключение темы -Кнопка в правом верхнем углу → выбор темы из списка - -### Особенности дизайна -- Цветная консоль (INFO, WARN, ERROR) -- Кнопки с тенями и hover эффектами -- Плавные переходы и анимации -- Адаптивный дизайн -- Современные иконки (Lucide React) - ---- - -## Файловый менеджер - -### Возможности - -#### Просмотр файлов -- Список файлов и папок -- 6 колонок: Имя, Тип, Размер, Изменение, Разрешение, Действия -- Поиск по названию -- Навигация по папкам - -#### Создание -- **Файл** - кнопка "Новый" → "Создать файл" -- **Папка** - кнопка "Новый" → "Создать папку" -- Ввод имени и Enter - -#### Загрузка и скачивание -- **Загрузить** - зеленая кнопка, выбор файла -- **Скачать** - иконка скачивания у файла - -#### Редактирование -- **Просмотр** - иконка глаза -- **Редактирование** - иконка карандаша -- Сохранение изменений - -#### Переименование -- Двойной клик по имени файла -- Ввод нового имени -- Enter для сохранения - -#### Перемещение файлов - -**Cut/Paste (Вырезать/Вставить):** -1. Выберите файлы чекбоксами -2. Нажмите "Вырезать" (оранжевая кнопка) -3. Перейдите в нужную папку -4. Нажмите "Вставить" (фиолетовая кнопка) - -**Особенности:** -- Файлы подсвечиваются оранжевым -- Счетчик вырезанных файлов -- Кнопка "Отмена" для отмены операции -- Drag & Drop отключен - -#### Удаление -- Иконка корзины -- Подтверждение удаления -- Удаление файлов и папок - -#### Выбор файлов -- Чекбокс в заголовке - выбрать все -- Чекбоксы у файлов - выбор отдельных -- Кнопка "Обновить" - обновить список - -### Интерфейс -- Поиск с иконкой -- Кнопки: Загрузить (зеленая), Обновить (серая), Новый (синяя) -- Кнопки перемещения: Вырезать (оранжевая), Вставить (фиолетовая), Отмена (серая) -- Таблица с hover эффектами -- "No data" при пустой папке - ---- - -## Система тикетов - -### Создание тикета -1. Кнопка "Тикеты" в шапке -2. Кнопка "+" для создания -3. Заполните: - - **Заголовок** - краткое описание - - **Описание** - подробности проблемы -4. Нажмите "Создать" - -### Статусы тикетов -- 🟡 **На рассмотрении** (pending) - новый тикет -- 🔵 **В работе** (in_progress) - тикет взят в работу -- 🟢 **Закрыт** (closed) - проблема решена - -### Работа с тикетами - -#### Просмотр -- Список всех тикетов -- Фильтр по статусу (цветные индикаторы) -- Информация: автор, дата, статус - -#### Чат -- Отправка сообщений -- Просмотр истории -- Автообновление каждые 3 секунды -- Уведомления о новых сообщениях - -#### Изменение статуса (админ/поддержка) -- Кнопки статусов в шапке тикета -- Автоматическое системное сообщение -- Уведомление всем участникам - -### Уведомления в тикетах - -**При отправке сообщения:** -- ✅ "Сообщение отправлено" - -**При получении сообщения:** -- ℹ️ "Новое сообщение: {автор}: {превью}..." -- Только от других пользователей -- Превью 50 символов - -**При изменении статуса:** -- ✅ "Статус изменён: Тикет #X теперь: {статус}" (действие) -- ℹ️ "Статус изменён: Тикет #X: {статус}" (просмотр) - -**При ошибках:** -- ❌ "Ошибка отправки" / "Ошибка изменения статуса" - -### Права доступа -- **Пользователи** - видят только свои тикеты -- **Админы** - видят все тикеты, могут менять статус -- **Поддержка** - видят все тикеты, могут менять статус - ---- - -## Личный кабинет - -### Доступ -Кнопка "Личный кабинет" в правом верхнем углу - -### Разделы - -#### Обзор -- Имя пользователя и роль -- Статистика: - - Мои серверы (созданные) - - Доступные серверы (общие) - - Тикеты (всего, по статусам) - - Общее количество серверов - -#### Безопасность - -**Изменение имени пользователя:** -1. Введите новое имя (минимум 3 символа) -2. Введите текущий пароль -3. Нажмите "Изменить имя" -4. Получите новый токен - -**Изменение пароля:** -1. Введите старый пароль -2. Введите новый пароль (минимум 6 символов) -3. Подтвердите новый пароль -4. Нажмите "Изменить пароль" - -**Показ/скрытие паролей:** -- Иконка глаза для переключения видимости - -### Просмотр чужих профилей (админ/поддержка) - -Админы и техподдержка могут просматривать профили других пользователей: -- Статистика пользователя -- Список серверов -- Тикеты пользователя -- Индикатор "Просмотр профиля: {username}" - -**Доступ:** -1. Раздел "Пользователи" -2. Кнопка "Профиль" у пользователя - ---- - -## OpenID Connect - -### Поддерживаемые провайдеры -- **ZITADEL** - основной провайдер - -### Настройка ZITADEL - -#### 1. Создание приложения -1. Зарегистрируйтесь на [ZITADEL](https://zitadel.com) -2. Создайте новый проект -3. Добавьте приложение (Application) -4. Выберите тип "Web" -5. Настройте Redirect URIs: - ``` - http://localhost:8000/api/auth/oidc/zitadel/callback - https://your-domain.com/api/auth/oidc/zitadel/callback - ``` - -#### 2. Получение учетных данных -1. Скопируйте **Client ID** -2. Создайте и скопируйте **Client Secret** -3. Скопируйте **Issuer URL** (например: `https://your-instance.zitadel.cloud`) - -#### 3. Настройка .env -```env -ZITADEL_ISSUER=https://your-instance.zitadel.cloud -ZITADEL_CLIENT_ID=your_client_id_here -ZITADEL_CLIENT_SECRET=your_client_secret_here -BASE_URL=http://localhost:8000 -FRONTEND_URL=http://localhost:3000 -``` - -### Использование - -#### Вход через ZITADEL -1. На странице входа нажмите кнопку "ZITADEL" -2. Авторизуйтесь на странице ZITADEL -3. Разрешите доступ приложению -4. Автоматическое перенаправление в панель - -#### Создание пользователя -- При первом входе автоматически создается пользователь -- Имя пользователя берется из email (до @) -- Роль: `user` (обычный пользователь) -- Пароль не требуется (используется OIDC) - -#### Связывание аккаунтов -- Каждый OIDC аккаунт уникален -- Повторный вход использует существующего пользователя -- ID хранится в формате: `zitadel:{sub}` - -### Безопасность -- Токены обновляются автоматически -- Используется PKCE для защиты -- Все данные передаются через HTTPS (в production) - ---- - -## Роли пользователей - -### Admin (Администратор) -**Полный доступ ко всем функциям:** -- ✅ Все серверы (создание, удаление, управление) -- ✅ Все тикеты (просмотр, изменение статуса) -- ✅ Управление пользователями (роли, доступ, удаление) -- ✅ Просмотр всех профилей -- ✅ Изменение настроек серверов - -**Получение роли:** -- Первый зарегистрированный пользователь -- Назначение другим админом - -### User (Пользователь) -**Стандартные права:** -- ✅ Свои серверы (создание, управление) -- ✅ Серверы с предоставленным доступом -- ✅ Свои тикеты (создание, просмотр) -- ✅ Свой профиль -- ❌ Управление другими пользователями -- ❌ Удаление серверов -- ❌ Просмотр чужих тикетов - -### Support (Техподдержка) -**Права поддержки:** -- ✅ Все тикеты (просмотр, ответы, изменение статуса) -- ✅ Просмотр профилей пользователей -- ✅ Свои серверы -- ❌ Управление пользователями -- ❌ Удаление серверов -- ❌ Изменение ролей - -### Banned (Заблокирован) -**Нет доступа:** -- ❌ Вход в систему запрещен -- ❌ API запросы отклоняются -- ❌ Все функции недоступны - -### Изменение ролей - -**Только админы могут:** -1. Раздел "Пользователи" -2. Выбрать пользователя -3. Кнопка "Изменить роль" -4. Выбрать новую роль -5. Подтвердить - -**Ограничения:** -- Нельзя изменить свою роль -- Нельзя удалить себя - ---- - -## Безопасность - -### JWT Токены -- **Алгоритм:** HS256 -- **Срок действия:** 7 дней -- **Хранение:** localStorage (фронтенд) -- **Передача:** Bearer Token в заголовке Authorization - -### Пароли -- **Хеширование:** bcrypt -- **Минимальная длина:** 6 символов -- **Проверка:** при каждом входе -- **Изменение:** требует старый пароль - -### Файловая безопасность -- Все пути проверяются на выход за пределы папки сервера -- Запрещены операции с файлами вне `servers/` -- Проверка прав доступа к серверу - -### API безопасность -- Все эндпоинты требуют авторизацию (кроме login/register) -- Проверка роли для админских функций -- Валидация входных данных -- Защита от SQL injection (используется JSON) - -### Рекомендации для production - -#### 1. Измените SECRET_KEY -В `backend/main.py`: -```python -SECRET_KEY = "your-very-long-random-secret-key-here" -``` - -#### 2. Используйте HTTPS -```env -BASE_URL=https://your-domain.com -FRONTEND_URL=https://your-domain.com -``` - -#### 3. Настройте CORS -В `backend/main.py`: -```python -app.add_middleware( - CORSMiddleware, - allow_origins=["https://your-domain.com"], # Конкретный домен - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) -``` - -#### 4. Используйте базу данных -Замените `users.json` и `tickets.json` на PostgreSQL/MySQL - -#### 5. Настройте firewall -- Ограничьте доступ к портам -- Разрешите только необходимые IP - -#### 6. Регулярные обновления -```bash -pip install --upgrade -r requirements.txt -npm update -``` - -#### 7. Логирование -Включите подробное логирование для отслеживания действий - -#### 8. Backup -Регулярно создавайте резервные копии: -- `users.json` -- `tickets.json` -- Папка `servers/` - ---- - -## Troubleshooting - -### Проблемы с запуском - -#### Backend не запускается -```bash -# Проверьте Python версию -python --version # Должно быть 3.8+ - -# Переустановите зависимости -pip install --upgrade -r requirements.txt - -# Проверьте порт 8000 -netstat -ano | findstr :8000 -``` - -#### Frontend не запускается -```bash -# Проверьте Node.js версию -node --version # Должно быть 16+ - -# Очистите кэш и переустановите -rm -rf node_modules package-lock.json -npm install - -# Проверьте порт 3000 -netstat -ano | findstr :3000 -``` - -### Проблемы с аутентификацией - -#### "Неверный токен" -- Токен истек (7 дней) -- Измененный SECRET_KEY -- **Решение:** Выйдите и войдите снова - -#### "Требуется авторизация" -- Токен не передан -- Неверный формат токена -- **Решение:** Проверьте заголовок Authorization - -#### OpenID Connect не работает -```bash -# Проверьте .env файл -cat .env - -# Проверьте переменные -echo $ZITADEL_ISSUER -echo $ZITADEL_CLIENT_ID - -# Проверьте Redirect URI в ZITADEL -# Должен быть: http://localhost:8000/api/auth/oidc/zitadel/callback -``` - -### Проблемы с серверами - -#### Сервер не запускается -- Проверьте наличие `server.jar` -- Проверьте команду запуска -- Проверьте логи в консоли -- Проверьте права доступа к файлам - -#### Консоль пустая -- Сервер еще не запущен -- WebSocket не подключен -- **Решение:** Перезапустите сервер - -#### Статистика показывает 0 -- Сервер остановлен -- Процесс завершился -- **Решение:** Запустите сервер - -### Проблемы с файлами - -#### "Файл не найден" -- Неверный путь -- Файл удален -- Нет прав доступа -- **Решение:** Проверьте путь и права - -#### Не удается загрузить файл -- Файл слишком большой -- Нет места на диске -- **Решение:** Освободите место - -#### Не удается переместить файл -- Файл открыт процессом -- Нет прав доступа -- **Решение:** Остановите сервер - -### Проблемы с тикетами - -#### Не приходят уведомления -- Проверьте интервал обновления (3 сек) -- Откройте консоль браузера (F12) -- Проверьте ошибки JavaScript - -#### Сообщения не отправляются -- Проверьте подключение к интернету -- Проверьте токен авторизации -- Проверьте логи backend - -### Проблемы с производительностью - -#### Медленная работа -```bash -# Проверьте использование ресурсов -# Windows: -tasklist | findstr python -tasklist | findstr node - -# Проверьте количество серверов -# Каждый сервер потребляет ресурсы -``` - -#### Высокое использование CPU -- Много запущенных серверов -- Частые обновления статистики -- **Решение:** Остановите неиспользуемые серверы - -### Логи и отладка - -#### Включить подробные логи (Backend) -В `backend/main.py`: -```python -import logging -logging.basicConfig(level=logging.DEBUG) -``` - -#### Просмотр логов (Frontend) -Откройте консоль браузера (F12) → Console - -#### Проверка API -```bash -# Проверьте доступность API -curl http://localhost:8000/api/auth/oidc/providers - -# Проверьте токен -curl http://localhost:8000/api/auth/me \ - -H "Authorization: Bearer YOUR_TOKEN" -``` - -### Получение помощи - -1. **Проверьте документацию** - возможно, ответ уже есть -2. **Проверьте логи** - backend и frontend -3. **Создайте тикет** - опишите проблему подробно -4. **GitHub Issues** - для багов и предложений - ---- - -## Дополнительная информация - -### Структура базы данных - -#### users.json -```json -{ - "username": { - "username": "string", - "password": "hashed_password", - "role": "admin|user|support|banned", - "servers": ["server1", "server2"], - "oidc_id": "provider:sub", - "email": "user@example.com", - "name": "User Name", - "picture": "https://...", - "provider": "zitadel", - "created_at": "2026-01-15T10:00:00" - } -} -``` - -#### tickets.json -```json -{ - "1": { - "id": "1", - "title": "Проблема", - "description": "Описание", - "author": "username", - "status": "pending|in_progress|closed", - "created_at": "2026-01-15T10:00:00", - "updated_at": "2026-01-15T11:00:00", - "messages": [ - { - "author": "username", - "text": "Сообщение", - "timestamp": "2026-01-15T10:00:00" - } - ] - } -} -``` - -#### panel_config.json (в папке сервера) -```json -{ - "name": "server1", - "displayName": "My Server", - "startCommand": "java -Xmx2G -jar server.jar nogui", - "owner": "username" -} -``` - -### Горячие клавиши - -- **Ctrl + K** - Поиск (в файловом менеджере) -- **Enter** - Отправить сообщение (в тикете) -- **Esc** - Закрыть модальное окно -- **F5** - Обновить страницу - -### Советы и трюки - -#### Быстрое создание сервера -1. Создайте сервер через панель -2. Загрузите `server.jar` через файловый менеджер -3. Создайте `eula.txt` с содержимым `eula=true` -4. Запустите сервер - -#### Массовое перемещение файлов -1. Выберите все файлы (чекбокс в заголовке) -2. Нажмите "Вырезать" -3. Перейдите в папку назначения -4. Нажмите "Вставить" - -#### Мониторинг нескольких серверов -Откройте панель в нескольких вкладках браузера для одновременного мониторинга - -#### Быстрый доступ к консоли -Добавьте панель в закладки браузера для быстрого доступа - -### Ограничения - -- **Максимальный размер файла:** зависит от настроек сервера -- **Количество серверов:** не ограничено (зависит от ресурсов) -- **Количество пользователей:** не ограничено -- **Длина сообщения в тикете:** не ограничена -- **Срок хранения логов:** 1000 последних строк - -### Roadmap (Планы развития) - -- [ ] Поддержка нескольких OIDC провайдеров -- [ ] Расписание запуска/остановки серверов -- [ ] Автоматические бэкапы -- [ ] Графики статистики -- [ ] Плагин-менеджер -- [ ] Мобильное приложение -- [ ] Push-уведомления -- [ ] Двухфакторная аутентификация -- [ ] Темная тема для консоли -- [ ] Экспорт логов - ---- - -## Changelog - -### Версия 1.0.0 (15.01.2026) -- ✨ Первый релиз -- ✅ Управление серверами -- ✅ Файловый менеджер -- ✅ Система тикетов -- ✅ Личный кабинет -- ✅ OpenID Connect (ZITADEL) -- ✅ 6 тем оформления -- ✅ Система уведомлений -- ✅ Управление пользователями -- ✅ Роли и права доступа -- ✅ WebSocket консоль -- ✅ Мониторинг ресурсов - ---- - -## Лицензия - -MIT License - свободное использование - ---- - -## Контакты и поддержка - -- **Документация:** Этот файл -- **API Документация:** API.md -- **Тикеты:** Используйте систему тикетов в панели -- **GitHub:** [Ссылка на репозиторий] - ---- - -**Спасибо за использование MC Panel!** 🎮 - -**Версия документации:** 1.0.0 -**Дата обновления:** 15 января 2026