Добавить 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