Table of Contents
- 👑 Роль Владельца и Система Управления Правами
- 📋 Содержание
- Обзор
- Роль Владельца
- Система Прав
- API Эндпоинты
- 1. Получить список пользователей
- 2. Изменить роль пользователя
- 3. Изменить права пользователя
- 4. Управление доступом к ресурсам
- 5. Удалить пользователя
- 6. Заблокировать пользователя
- 7. Разблокировать пользователя
- Примеры Использования
- Миграция Существующих Пользователей
- UI Компоненты
- Безопасность
- FAQ
- Можно ли иметь несколько владельцев?
- Что делать, если владелец потерял доступ?
- Может ли владелец удалить сам себя?
- Как передать роль владельца?
- Changelog
👑 Роль Владельца и Система Управления Правами
Дата: 15 января 2026
Версия: 1.1.0
📋 Содержание
- Обзор
- Роль Владельца
- Система Прав
- API Эндпоинты
- Примеры Использования
- Миграция Существующих Пользователей
Обзор
В MC Panel добавлена роль Владелец (Owner) с расширенными возможностями управления правами пользователей. Владелец может:
- ✅ Изменять роли пользователей (admin, user, support, banned)
- ✅ Управлять правами доступа к ресурсам
- ✅ Забирать доступ к серверам, тикетам, файлам
- ✅ Выдавать доступ к ресурсам
- ✅ Удалять пользователей
- ✅ Полный контроль над панелью
Роль Владельца
Как стать владельцем?
Первый зарегистрированный пользователь автоматически получает роль владельца.
{
"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 |
|---|---|---|---|---|---|
| Управление пользователями | ✅ | ✅ | ❌ | ❌ | ❌ |
| Изменение ролей | ✅ | ❌ | ❌ | ❌ | ❌ |
| Удаление пользователей | ✅ | ❌ | ❌ | ❌ | ❌ |
| Управление всеми серверами | ✅ | ✅ | ❌ | ❌ | ❌ |
| Управление своими серверами | ✅ | ✅ | ✅ | ✅ | ❌ |
| Просмотр всех тикетов | ✅ | ✅ | ✅ | ❌ | ❌ |
| Ответ на тикеты | ✅ | ✅ | ✅ | ✅ | ❌ |
| Создание тикетов | ✅ | ✅ | ✅ | ✅ | ❌ |
| Доступ к панели | ✅ | ✅ | ✅ | ✅ | ❌ |
Система Прав
Структура прав пользователя
{
"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. Получить список пользователей
GET /api/users
Authorization: Bearer <token>
Требуется роль: Owner или Admin
Ответ:
{
"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. Изменить роль пользователя
PUT /api/users/{user_id}/role
Authorization: Bearer <token>
Content-Type: application/json
{
"role": "admin"
}
Требуется роль: Owner
Доступные роли:
owner(только один владелец)adminsupportuserbanned
Ответ:
{
"message": "Роль пользователя изменена",
"user": {
"id": 2,
"username": "User1",
"role": "admin"
}
}
3. Изменить права пользователя
PUT /api/users/{user_id}/permissions
Authorization: Bearer <token>
Content-Type: application/json
{
"permissions": {
"manage_servers": true,
"manage_tickets": true,
"manage_files": false
}
}
Требуется роль: Owner
Ответ:
{
"message": "Права пользователя обновлены",
"permissions": {
"manage_servers": true,
"manage_tickets": true,
"manage_files": false
}
}
4. Управление доступом к ресурсам
Выдать доступ к серверу
POST /api/users/{user_id}/access/servers
Authorization: Bearer <token>
Content-Type: application/json
{
"server_name": "Survival"
}
Требуется роль: Owner или Admin
Ответ:
{
"message": "Доступ к серверу выдан",
"server": "Survival",
"user": "User1"
}
Забрать доступ к серверу
DELETE /api/users/{user_id}/access/servers/{server_name}
Authorization: Bearer <token>
Требуется роль: Owner или Admin
Ответ:
{
"message": "Доступ к серверу отозван",
"server": "Survival",
"user": "User1"
}
5. Удалить пользователя
DELETE /api/users/{user_id}
Authorization: Bearer <token>
Требуется роль: Owner
Ответ:
{
"message": "Пользователь удалён",
"username": "User1"
}
Примечание: Владельца удалить нельзя!
6. Заблокировать пользователя
POST /api/users/{user_id}/ban
Authorization: Bearer <token>
Content-Type: application/json
{
"reason": "Нарушение правил"
}
Требуется роль: Owner или Admin
Ответ:
{
"message": "Пользователь заблокирован",
"username": "User1",
"reason": "Нарушение правил"
}
7. Разблокировать пользователя
POST /api/users/{user_id}/unban
Authorization: Bearer <token>
Требуется роль: Owner или Admin
Ответ:
{
"message": "Пользователь разблокирован",
"username": "User1"
}
Примеры Использования
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
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
# Токен владельца
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"
Миграция Существующих Пользователей
Автоматическая миграция
При первом запуске обновлённой версии панели:
- Первый пользователь в
users.jsonполучает рольowner - Все пользователи с ролью
adminостаютсяadmin - Все остальные пользователи получают роль
user - Всем пользователям добавляются права по умолчанию
Скрипт миграции
# 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()
Запуск миграции:
cd backend
python migrate_users.py
UI Компоненты
Панель управления пользователями
В панели администратора добавлен раздел "Управление пользователями" (только для Owner):
Возможности:
- Просмотр списка всех пользователей
- Изменение ролей
- Управление правами
- Выдача/отзыв доступа к ресурсам
- Блокировка/разблокировка
- Удаление пользователей
Компонент: frontend/src/components/UserManagement.jsx
Безопасность
Проверка прав
Все эндпоинты управления пользователями защищены:
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="Требуется роль администратора или владельца"
)
Логирование действий
Все действия владельца логируются:
# Пример лога
{
"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.
Может ли владелец удалить сам себя?
Нет, владельца удалить нельзя. Сначала нужно передать роль владельца другому пользователю.
Как передать роль владельца?
# Через 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
Полный контроль над панелью! 👑