Added Role Owner and new UI for Owner

This commit is contained in:
2026-01-15 19:00:09 +06:00
parent 9a1e2df04d
commit 551d733dc4
15 changed files with 3999 additions and 22 deletions

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