Добавить Owner view all
274
Owner-view-all.md
Normal file
274
Owner-view-all.md
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
# 👑 Владелец видит все серверы
|
||||||
|
|
||||||
|
**Дата:** 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
|
||||||
|
**Статус:** РАБОТАЕТ ✅
|
||||||
|
|
||||||
|
**Полный контроль над всеми серверами!** 👑🖥️
|
||||||
|
|
||||||
Reference in New Issue
Block a user