Change drone.yml

This commit is contained in:
2026-01-15 19:25:42 +06:00
parent d25d7fc2f9
commit 112123b0ff
8 changed files with 937 additions and 352 deletions

431
MULTIPLE_OWNERS.md Normal file
View File

@@ -0,0 +1,431 @@
# 👑 Несколько владельцев
**Дата:** 15 января 2026
**Статус:** РЕАЛИЗОВАНО ✅
---
## 🎯 Что изменилось
### До изменения
**Ограничение:** Мог быть только ОДИН владелец
```
❌ При назначении нового owner, старый owner автоматически становился admin
❌ Нельзя было удалить владельца
❌ Нельзя было заблокировать владельца
```
**Проблема:** Если нужно несколько администраторов с полными правами, приходилось использовать роль admin, у которой нет права изменять роли.
---
### После изменения
**Возможность:** Может быть НЕСКОЛЬКО владельцев
```
✅ Можно назначить несколько пользователей с ролью owner
✅ Можно удалить владельца (если их больше одного)
✅ Можно заблокировать владельца (если их больше одного)
✅ Всегда должен остаться хотя бы один владелец
```
**Преимущество:** Несколько человек могут иметь полный контроль над панелью.
---
## 📊 Новая логика
### Назначение владельца
**Было:**
```python
# Если назначается новый owner, текущий owner становится admin
if role_data.role == "owner":
for user in users.values():
if user.get("role") == "owner":
user["role"] = "admin" # Понижение роли
```
**Стало:**
```python
# Разрешаем несколько владельцев
# Просто назначаем роль без изменения других владельцев
users[username]["role"] = role_data.role
```
---
### Удаление владельца
**Было:**
```python
if users[username].get("role") == "owner":
raise HTTPException(400, "Нельзя удалить владельца")
```
**Стало:**
```python
if users[username].get("role") == "owner":
owners_count = sum(1 for u in users.values() if u.get("role") == "owner")
if owners_count <= 1:
raise HTTPException(400, "Нельзя удалить последнего владельца")
```
**Логика:**
- Если владельцев больше одного → можно удалить
- Если владелец последний → нельзя удалить
---
### Блокировка владельца
**Было:**
```python
if users[username].get("role") == "owner":
raise HTTPException(400, "Нельзя заблокировать владельца")
```
**Стало:**
```python
if users[username].get("role") == "owner":
owners_count = sum(1 for u in users.values() if u.get("role") == "owner")
if owners_count <= 1:
raise HTTPException(400, "Нельзя заблокировать последнего владельца")
```
**Логика:**
- Если владельцев больше одного → можно заблокировать
- Если владелец последний → нельзя заблокировать
---
## 💡 Примеры использования
### Сценарий 1: Назначить второго владельца
**Текущее состояние:**
```json
{
"Root": {"role": "owner"},
"Admin1": {"role": "admin"}
}
```
**Действие:** Назначить Admin1 владельцем
**Результат:**
```json
{
"Root": {"role": "owner"},
"Admin1": {"role": "owner"} // Теперь тоже владелец!
}
```
**Оба пользователя имеют полные права!**
---
### Сценарий 2: Удалить одного из владельцев
**Текущее состояние:**
```json
{
"Root": {"role": "owner"},
"Admin1": {"role": "owner"},
"User1": {"role": "user"}
}
```
**Действие:** Удалить Admin1
**Результат:**
```json
{
"Root": {"role": "owner"},
"User1": {"role": "user"}
}
```
**Успешно!** Root остался владельцем ✅
---
### Сценарий 3: Попытка удалить последнего владельца
**Текущее состояние:**
```json
{
"Root": {"role": "owner"},
"User1": {"role": "user"}
}
```
**Действие:** Удалить Root
**Результат:**
```
❌ Ошибка: "Нельзя удалить последнего владельца. Должен остаться хотя бы один владелец."
```
**Защита от потери контроля!** 🔒
---
### Сценарий 4: Три владельца
**Возможно:**
```json
{
"Root": {"role": "owner"},
"Admin1": {"role": "owner"},
"Admin2": {"role": "owner"},
"User1": {"role": "user"}
}
```
**Все три владельца имеют:**
- ✅ Управление пользователями
- ✅ Изменение ролей
- ✅ Удаление пользователей
- ✅ Просмотр всех ресурсов
-Все права
---
## 🎯 Как использовать
### Назначить нового владельца
1. Войдите как владелец
2. Нажмите "Управление"
3. Найдите пользователя
4. Нажмите "Роль"
5. Выберите "Владелец"
6. Готово! Теперь два владельца
### Понизить владельца до админа
1. Войдите как владелец
2. Нажмите "Управление"
3. Найдите другого владельца
4. Нажмите "Роль"
5. Выберите "Администратор"
6. Владелец понижен до админа
### Удалить владельца
1. Убедитесь что владельцев больше одного
2. Войдите как владелец
3. Нажмите "Управление"
4. Найдите владельца для удаления
5. Нажмите кнопку удаления (красная)
6. Подтвердите
7. Владелец удалён (если их было больше одного)
---
## 🔒 Правила безопасности
### Что НЕЛЬЗЯ сделать:
- ❌ Удалить последнего владельца
- ❌ Заблокировать последнего владельца
- ❌ Изменить свою роль
- ❌ Удалить самого себя
- ❌ Заблокировать самого себя
### Что МОЖНО:
- ✅ Назначить несколько владельцев
- ✅ Удалить владельца (если их больше одного)
- ✅ Заблокировать владельца (если их больше одного)
- ✅ Понизить владельца до админа
- ✅ Повысить админа до владельца
---
## 📊 Сравнение ролей
### Owner (Владелец) - Несколько человек ✅
**Права:**
- ✅ Управление пользователями
- ✅ Изменение ролей (включая назначение других владельцев)
- ✅ Удаление пользователей
- ✅ Управление серверами
- ✅ Просмотр всех ресурсов
-Все права
**Ограничения:**
- Должен быть хотя бы один владелец
- Нельзя удалить/заблокировать себя
### Admin (Администратор) - Несколько человек ✅
**Права:**
- ✅ Управление пользователями
- ✅ Управление серверами
- ✅ Просмотр всех ресурсов
- ❌ Изменение ролей
- ❌ Удаление пользователей
**Отличие от Owner:**
- Не может назначать владельцев
- Не может удалять пользователей
---
## 🎨 UI изменения
### Модальное окно изменения роли
Теперь при выборе "Владелец" не будет предупреждения о понижении текущего владельца:
```
┌─────────────────────────────────┐
│ Изменить роль: Admin1 │
├─────────────────────────────────┤
│ [👑 Владелец] │
│ Полный контроль над панелью │
│ ⚠️ Может быть несколько │ ← Новое
│ │
│ [🛡️ Администратор] ← Текущая │
│ Управление без изменения │
│ ролей │
│ │
│ [Отмена] │
└─────────────────────────────────┘
```
### Список пользователей
Теперь может быть несколько пользователей с меткой "👑 Владелец":
```
1. Root [👑 Владелец]
2. Admin1 [👑 Владелец] ← Новое
3. Admin2 [🛡️ Админ]
4. User1 [✅ Пользователь]
```
---
## 🔧 Технические детали
### Изменённые файлы
**Файл:** `backend/main.py`
**Изменённые эндпоинты:**
1. `PUT /api/users/{username}/role` - Убрано автоматическое понижение
2. `DELETE /api/users/{username}` - Добавлена проверка количества владельцев
3. `POST /api/users/{username}/ban` - Добавлена проверка количества владельцев
**Добавленная логика:**
```python
# Подсчёт владельцев
owners_count = sum(1 for u in users.values() if u.get("role") == "owner")
# Проверка перед удалением/блокировкой
if owners_count <= 1:
raise HTTPException(400, "Нельзя удалить/заблокировать последнего владельца")
```
---
## 🎯 Рекомендации
### Когда использовать несколько владельцев
**Хорошие случаи:**
- ✅ Несколько администраторов проекта
- ✅ Команда разработчиков
- ✅ Резервный владелец на случай отсутствия основного
- ✅ Разделение ответственности
**Плохие случаи:**
- ❌ Слишком много владельцев (риск безопасности)
- ❌ Назначение владельцем ненадёжных пользователей
- ❌ Владелец "на пробу"
### Рекомендуемая структура
```
👑 Owner (2-3 человека) - Основные администраторы
🛡️ Admin (3-5 человек) - Помощники администраторов
💬 Support (5-10 человек) - Техническая поддержка
✅ User (неограниченно) - Обычные пользователи
```
---
## 🚀 Перезапуск
После изменений перезапустите панель:
```bash
RESTART_ALL.bat
```
Или вручную:
```bash
cd backend
python main.py
```
---
## ✅ Проверка
### Тест 1: Назначить второго владельца
1. Войдите как Root
2. Управление → MihailPrud → Роль → Владелец
3. Проверьте что оба имеют роль owner
### Тест 2: Попытка удалить единственного владельца
1. Понизьте всех владельцев кроме одного
2. Попытайтесь удалить последнего
3. Должна быть ошибка
### Тест 3: Удаление одного из нескольких владельцев
1. Назначьте двух владельцев
2. Удалите одного
3. Должно пройти успешно
---
## 🎉 Итог
**Теперь можно иметь несколько владельцев!**
### Преимущества:
- ✅ Гибкость в управлении
- ✅ Резервирование доступа
- ✅ Разделение ответственности
- ✅ Защита от потери контроля (всегда остаётся хотя бы один владелец)
### Безопасность:
- 🔒 Нельзя удалить последнего владельца
- 🔒 Нельзя заблокировать последнего владельца
- 🔒 Нельзя изменить свою роль
- 🔒 Нельзя удалить себя
---
**Версия:** 1.1.0
**Дата:** 15 января 2026
**Статус:** РАБОТАЕТ ✅
**Несколько владельцев - больше контроля!** 👑👑👑