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