Removed unused .md files

This commit is contained in:
2026-01-15 19:38:21 +06:00
parent 112123b0ff
commit 1985a25ea8
11 changed files with 0 additions and 4811 deletions

531
API.md
View File

@@ -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 <token>
```
### Заголовки запросов
```
Content-Type: application/json
Authorization: Bearer <token>
```
### Формат ответов
```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 <token>`
**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!** 🚀

View File

@@ -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/)

View File

@@ -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
**Статус:** УПРОЩЕНО ✅
**Меньше сложности - больше контроля!** 🚀

View File

@@ -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
**Статус:** РАБОТАЕТ ✅
**Несколько владельцев - больше контроля!** 👑👑👑

View File

@@ -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 <token>
```
**Требуется роль:** 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 <token>
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 <token>
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 <token>
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 <token>
```
**Требуется роль:** Owner или Admin
**Ответ:**
```json
{
"message": "Доступ к серверу отозван",
"server": "Survival",
"user": "User1"
}
```
---
### 5. Удалить пользователя
```http
DELETE /api/users/{user_id}
Authorization: Bearer <token>
```
**Требуется роль:** Owner
**Ответ:**
```json
{
"message": "Пользователь удалён",
"username": "User1"
}
```
**Примечание:** Владельца удалить нельзя!
---
### 6. Заблокировать пользователя
```http
POST /api/users/{user_id}/ban
Authorization: Bearer <token>
Content-Type: application/json
{
"reason": "Нарушение правил"
}
```
**Требуется роль:** Owner или Admin
**Ответ:**
```json
{
"message": "Пользователь заблокирован",
"username": "User1",
"reason": "Нарушение правил"
}
```
---
### 7. Разблокировать пользователя
```http
POST /api/users/{user_id}/unban
Authorization: Bearer <token>
```
**Требуется роль:** 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
**Полный контроль над панелью!** 👑

View File

@@ -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 ✅
**Полный контроль над панелью!** 👑🚀

View File

@@ -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
**Статус:** РАБОТАЕТ ✅
**Полный контроль над всеми серверами!** 👑🖥️

View File

@@ -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 ✅
**Полный контроль над панелью!** 👑🚀

View File

@@ -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
**Статус:** ГОТОВО К ИСПОЛЬЗОВАНИЮ ✅
**Полный контроль над панелью!** 👑🚀

View File

@@ -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!** 🎮

View File

@@ -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 <repository-url>
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