Управление менеджерами портала¶
Менеджеры — это пользователи, которые имеют доступ к панели управления портала в Catena. Система менеджеров позволяет предоставлять различные уровни доступа разным сотрудникам для управления контентом, абонентами и настройками портала.
Что такое менеджер¶
Менеджер в Catena — это учётная запись пользователя с правами доступа к управлению порталом. В отличие от абонентов (которые смотрят каналы), менеджеры администрируют систему.
Ключевые особенности:
- Аутентификация по email и паролю — вход в панель управления
- Система прав доступа — гибкая настройка разрешений для каждого менеджера
- Множественные порталы — один email может управлять несколькими порталами
- Роли и полномочия — от просмотра статистики до полного администрирования
- Изоляция по порталам — менеджер видит только данные своих порталов
Типичная структура команды:
Портал "My IPTV Service"
├── Владелец портала (ownerId)
│ └── Назначается снаружи системы, полный доступ
├── Главный администратор (isAdmin: true)
│ └── Управление инфраструктурой
├── Контент-менеджер (isContentAdmin: true)
│ └── Управление каналами, пакетами, EPG
├── Менеджер по абонентам (isSubscriberAdmin: true)
│ └── Работа с абонентами и подписками
└── Оператор поддержки (только чтение)
└── Просмотр данных, без изменений
Владелец портала vs Менеджеры¶
Владелец портала (Owner)¶
Важно: Владелец портала — это особая роль, которая управляется вне этого Management API.
Характеристики владельца:
- Устанавливается при создании портала на уровне инфраструктуры
- Не может быть изменён через Management API данного портала
- Имеет полный и неограниченный доступ к порталу
- Права доступа к нему не применяются (isAdmin, isContentAdmin и т.д.)
- Может создавать, изменять и удалять других менеджеров
- Может назначать любые права другим менеджерам
Поле ownerId в портале:
{
"portalId": "pKl9SW3AAAE.",
"ownerId": "mKl9SW3AAAE.", // ID владельца
"name": "my-portal"
}
Смена владельца:
- Выполняется администратором системы Catena
- Не доступна через обычный Management API
- Требует обращения в техническую поддержку
- Используется при передаче портала другому лицу
Обычные менеджеры¶
Менеджеры, создаваемые через API:
- Создаются владельцем портала или другими администраторами
- Имеют ограниченные права согласно настройкам
- Могут быть изменены или удалены владельцем
- Подчиняются системе прав доступа
Ключевое различие:
Характеристика | Владелец (Owner) | Обычный менеджер |
---|---|---|
Создание | Вне Management API | Через Management API |
Изменение прав | Не применимо | Настраивается владельцем |
Удаление | Только администратором системы | Владельцем портала |
Доступ | Полный всегда | Согласно правам |
Система прав доступа¶
Уровни доступа¶
isAdmin — администратор инфраструктуры
- Управление техническими настройками портала
- Создание и удаление других менеджеров
- Изменение критичных параметров
- Доступ к серверным настройкам
- Не даёт автоматически доступ к контенту или абонентам
isContentAdmin — администратор контента
- Управление каналами (создание, редактирование, удаление)
- Управление пакетами каналов
- Управление источниками EPG
- Настройка связей каналов с пакетами
- Не имеет доступа к абонентам
isSubscriberAdmin — администратор абонентов
- Управление абонентами (создание, редактирование, удаление)
- Управление подписками на пакеты
- Просмотр сеансов воспроизведения
- Просмотр журнала операций
- Не может изменять каналы и пакеты
Комбинирование прав:
Менеджер может иметь несколько прав одновременно:
{
"isAdmin": true,
"isContentAdmin": true,
"isSubscriberAdmin": true
}
Это даст полный доступ ко всем функциям портала (кроме смены владельца).
Примеры распределения прав¶
Сценарий 1: Небольшая компания
Владелец: owner@company.com
└── Все права по умолчанию
Технический специалист: tech@company.com
└── isAdmin: true, isContentAdmin: true, isSubscriberAdmin: false
Поддержка: support@company.com
└── isAdmin: false, isContentAdmin: false, isSubscriberAdmin: true
Сценарий 2: Крупный оператор
Владелец: ceo@operator.com
└── Главный владелец бизнеса
CTO: cto@operator.com
└── isAdmin: true (техническая инфраструктура)
Контент-директор: content@operator.com
└── isContentAdmin: true (закупка и настройка каналов)
Руководитель поддержки: support-head@operator.com
└── isSubscriberAdmin: true (управление клиентской базой)
Операторы поддержки: support1@, support2@, ...
└── isSubscriberAdmin: true (только работа с абонентами)
Основные параметры менеджера¶
Идентификация¶
managerId — уникальный идентификатор менеджера
- Формат: base64-кодированный Snowflake ID
- Пример:
mKl9SW3AAAE.
- Генерируется при создании
portalId — идентификатор портала
- К какому порталу привязан менеджер
- Один менеджер создаётся для одного портала
- Пример:
pKl9SW3AAAE.
email — email адрес менеджера
- Используется для входа в систему
- Уникален в рамках портала
- Может повторяться в разных порталах (один человек управляет несколькими)
- Пример:
admin@company.com
name — отображаемое имя
- ФИО или идентификатор менеджера
- Используется в интерфейсе и логах
- Пример: "Иван Петров", "Admin"
Аутентификация¶
password — пароль менеджера
- Write-only поле — передаётся только при создании/обновлении
- Не возвращается в GET запросах (в целях безопасности)
- Хранится в БД в зашифрованном виде (bcrypt, $2a$)
- Формат хэша:
$2a$12$salt$hashedpassword
- Минимальные требования: 8+ символов, сложность (настраивается)
Хранение пароля в БД:
passwordEncrypted: "$2a$12$abcdefghijklmnopqrstuvwxyz..."
│ │ │
│ │ └─ Хэшированный пароль
│ └──── Salt (соль)
└─────── Алгоритм (bcrypt)
Временные метки¶
createdAt — дата создания менеджера
- ISO 8601 format
- Пример:
2024-01-15T10:00:00Z
updatedAt — дата последнего изменения
- Обновляется при изменении любых параметров
- Пример:
2024-10-16T14:30:00Z
Создание менеджера¶
Через веб-интерфейс¶
- Откройте раздел "Менеджеры" в панели управления
- Нажмите "Создать менеджера"
- Заполните обязательные поля:
- Email — адрес электронной почты
- Name — имя или идентификатор
- Password — пароль для входа
- Настройте права доступа:
- ☑️ isAdmin — администратор инфраструктуры
- ☑️ isContentAdmin — управление контентом
- ☑️ isSubscriberAdmin — управление абонентами
- Сохраните менеджера
Важно: Только владелец портала и менеджеры с правом isAdmin: true
могут создавать других менеджеров.
Через Management API¶
Создать нового менеджера:
curl -X POST https://your-catena-domain.com/tv-management/api/v1/managers \
-H "X-Auth-Token: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"email": "content@company.com",
"name": "Контент-менеджер",
"password": "SecurePassword123!",
"isAdmin": false,
"isContentAdmin": true,
"isSubscriberAdmin": false
}'
Ответ:
{
"managerId": "mKl9SW3AAAB.",
"portalId": "pKl9SW3AAAE.",
"email": "content@company.com",
"name": "Контент-менеджер",
"isAdmin": false,
"isContentAdmin": true,
"isSubscriberAdmin": false,
"createdAt": "2024-10-16T15:00:00Z",
"updatedAt": "2024-10-16T15:00:00Z"
}
Обратите внимание: Поле password
не возвращается в ответе.
Просмотр списка менеджеров¶
Через веб-интерфейс¶
В разделе "Менеджеры" отображается таблица:
- Имя — отображаемое имя менеджера
- Email — адрес электронной почты
- Права — иконки или badges с активными правами
- Последний вход — когда менеджер заходил в систему
- Создан — дата создания учётной записи
- Действия — кнопки редактирования и удаления
Через Management API¶
Получить список всех менеджеров портала:
curl -X GET https://your-catena-domain.com/tv-management/api/v1/managers \
-H "X-Auth-Token: your-api-key"
Ответ:
{
"managers": [
{
"managerId": "mKl9SW3AAAE.",
"portalId": "pKl9SW3AAAE.",
"email": "owner@company.com",
"name": "Владелец",
"isAdmin": true,
"isContentAdmin": true,
"isSubscriberAdmin": true,
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-01-15T10:00:00Z"
},
{
"managerId": "mKl9SW3AAAB.",
"portalId": "pKl9SW3AAAE.",
"email": "content@company.com",
"name": "Контент-менеджер",
"isAdmin": false,
"isContentAdmin": true,
"isSubscriberAdmin": false,
"createdAt": "2024-10-16T15:00:00Z",
"updatedAt": "2024-10-16T15:00:00Z"
}
]
}
Примечание: Список включает всех менеджеров портала, но не показывает, кто из них владелец. Эта информация доступна в настройках портала через поле ownerId
.
Получение информации о менеджере¶
Через Management API¶
curl -X GET https://your-catena-domain.com/tv-management/api/v1/managers/mKl9SW3AAAB. \
-H "X-Auth-Token: your-api-key"
Ответ: Аналогичен объекту manager из списка.
Редактирование менеджера¶
Через веб-интерфейс¶
- Откройте список менеджеров
- Найдите нужного менеджера и нажмите "Редактировать"
- Измените параметры:
- Имя
- Email (с осторожностью)
- Права доступа
- Пароль (если нужно сменить)
- Сохраните изменения
Ограничения:
- Владелец портала не может изменить свои права (они управляются снаружи)
- Менеджер не может изменить собственные права (только владелец или admin)
- Нельзя убрать последнего администратора
Через Management API¶
Обновить данные менеджера:
curl -X PUT https://your-catena-domain.com/tv-management/api/v1/managers/mKl9SW3AAAB. \
-H "X-Auth-Token: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"email": "content@company.com",
"name": "Старший контент-менеджер",
"isAdmin": false,
"isContentAdmin": true,
"isSubscriberAdmin": true
}'
Смена пароля:
curl -X PUT https://your-catena-domain.com/tv-management/api/v1/managers/mKl9SW3AAAB. \
-H "X-Auth-Token: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"email": "content@company.com",
"name": "Контент-менеджер",
"password": "NewSecurePassword456!",
"isAdmin": false,
"isContentAdmin": true,
"isSubscriberAdmin": false
}'
Важно:
- Если передать поле
password
, оно будет обновлено - Если не передавать
password
, старый пароль сохранится - При смене пароля менеджер должен будет войти заново
Удаление менеджера¶
Через веб-интерфейс¶
- Откройте список менеджеров
- Найдите менеджера для удаления
- Нажмите "Удалить"
- Подтвердите удаление
Предупреждение:
- Нельзя удалить владельца портала
- Нельзя удалить последнего администратора
- Менеджер немедленно потеряет доступ к системе
Через Management API¶
curl -X DELETE https://your-catena-domain.com/tv-management/api/v1/managers/mKl9SW3AAAB. \
-H "X-Auth-Token: your-api-key"
Ответ: HTTP 201 - менеджер удалён
Вход в систему¶
Процесс аутентификации¶
Менеджеры входят через email и пароль:
curl -X POST https://your-catena-domain.com/tv-management/api/v1/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@company.com",
"password": "password123"
}'
Ответ:
{
"portals": [
{
"portalId": "pKl9SW3AAAE.",
"portalName": "My IPTV Service",
"sessionId": "sessionKl9SW3AAAE."
},
{
"portalId": "pKl9SW3AAAB.",
"portalName": "Premium TV",
"sessionId": "sessionKl9SW3AAAB."
}
]
}
Множественные порталы:
- Если email используется в нескольких порталах, возвращается список всех доступных
- Менеджер выбирает портал для работы
- Каждый портал имеет свой
sessionId
для дальнейшей работы
Использование sessionId:
После получения sessionId, используйте его как API ключ для доступа к порталу:
curl -X GET https://your-catena-domain.com/tv-management/api/v1/channels \
-H "X-Auth-Token: sessionKl9SW3AAAE."
Типичные сценарии использования¶
Сценарий 1: Разделение обязанностей¶
Задача: Распределить работу между специалистами
Команда:
- Владелец портала (owner@company.com)
- Стратегические решения
- Назначение менеджеров
-
Контроль финансов
-
Технический директор (tech@company.com)
isAdmin: true
- Настройка серверов
- Мониторинг инфраструктуры
-
Создание других менеджеров
-
Контент-менеджер (content@company.com)
isContentAdmin: true
- Добавление новых каналов
- Создание пакетов
-
Настройка EPG
-
Менеджер клиентского сервиса (support@company.com)
isSubscriberAdmin: true
- Работа с абонентами
- Управление подписками
- Решение проблем клиентов
Создание команды:
#!/bin/bash
# Владелец создаёт остальных менеджеров
# Технический директор
curl -X POST $API_URL/managers -H "X-Auth-Token: $OWNER_KEY" -d '{
"email": "tech@company.com",
"name": "Технический директор",
"password": "SecurePass1!",
"isAdmin": true,
"isContentAdmin": false,
"isSubscriberAdmin": false
}'
# Контент-менеджер
curl -X POST $API_URL/managers -H "X-Auth-Token: $OWNER_KEY" -d '{
"email": "content@company.com",
"name": "Контент-менеджер",
"password": "SecurePass2!",
"isAdmin": false,
"isContentAdmin": true,
"isSubscriberAdmin": false
}'
# Менеджер поддержки
curl -X POST $API_URL/managers -H "X-Auth-Token: $OWNER_KEY" -d '{
"email": "support@company.com",
"name": "Клиентский сервис",
"password": "SecurePass3!",
"isAdmin": false,
"isContentAdmin": false,
"isSubscriberAdmin": true
}'
Сценарий 2: Управление несколькими порталами¶
Задача: Один человек управляет тремя IPTV-брендами
Решение:
Создайте менеджера с одним email в каждом портале:
import requests
portals = [
{"id": "portal1_id", "api_key": "portal1_key", "name": "Premium TV"},
{"id": "portal2_id", "api_key": "portal2_key", "name": "Family TV"},
{"id": "portal3_id", "api_key": "portal3_key", "name": "Sport TV"}
]
manager_data = {
"email": "admin@company.com",
"name": "Главный администратор",
"password": "SecurePassword123!",
"isAdmin": True,
"isContentAdmin": True,
"isSubscriberAdmin": True
}
for portal in portals:
response = requests.post(
f"{API_URL}/managers",
headers={"X-Auth-Token": portal['api_key']},
json=manager_data
)
print(f"Создан менеджер в портале {portal['name']}")
При входе:
curl -X POST $API_URL/login -d '{
"email": "admin@company.com",
"password": "SecurePassword123!"
}'
Результат:
{
"portals": [
{"portalId": "portal1_id", "portalName": "Premium TV", "sessionId": "session1"},
{"portalId": "portal2_id", "portalName": "Family TV", "sessionId": "session2"},
{"portalId": "portal3_id", "portalName": "Sport TV", "sessionId": "session3"}
]
}
Менеджер может выбрать любой портал для работы.
Сценарий 3: Временный доступ¶
Задача: Предоставить временный доступ подрядчику
Решение:
- Создать менеджера с ограниченными правами
- После завершения работ удалить учётную запись
# Создать временного менеджера
curl -X POST $API_URL/managers -H "X-Auth-Token: $OWNER_KEY" -d '{
"email": "contractor@external.com",
"name": "Временный контент-менеджер",
"password": "TempPass123!",
"isAdmin": false,
"isContentAdmin": true,
"isSubscriberAdmin": false
}'
# После завершения работ (через месяц)
curl -X DELETE $API_URL/managers/mKl9SW3AAAB. \
-H "X-Auth-Token: $OWNER_KEY"
Рекомендации:
- Устанавливайте напоминание об удалении
- Используйте описательное имя ("Временный...")
- Предоставляйте минимально необходимые права
- Смените пароли после удаления временного доступа
Лучшие практики¶
Безопасность паролей¶
Требования к паролям:
import re
def validate_password(password):
"""Валидация пароля"""
if len(password) < 8:
return False, "Минимум 8 символов"
if not re.search(r'[A-Z]', password):
return False, "Требуется хотя бы одна заглавная буква"
if not re.search(r'[a-z]', password):
return False, "Требуется хотя бы одна строчная буква"
if not re.search(r'[0-9]', password):
return False, "Требуется хотя бы одна цифра"
if not re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
return False, "Требуется хотя бы один спецсимвол"
return True, "Пароль надёжный"
# Примеры
print(validate_password("password")) # False
print(validate_password("Password1!")) # True
Политика паролей:
- Минимум 8 символов
- Заглавные и строчные буквы
- Цифры и спецсимволы
- Не использовать общие пароли (password123, admin, qwerty)
- Менять каждые 90 дней
- Не использовать один пароль для всех порталов
Управление правами¶
Принцип минимальных привилегий:
НЕ давайте больше прав, чем нужно для работы
Плохо:
{
"email": "intern@company.com",
"isAdmin": true, // ❌ Слишком много
"isContentAdmin": true, // ❌ Слишком много
"isSubscriberAdmin": true // ❌ Слишком много
}
Хорошо:
{
"email": "intern@company.com",
"isAdmin": false,
"isContentAdmin": false,
"isSubscriberAdmin": true // ✅ Только то, что нужно
}
Аудит прав:
Регулярно проверяйте, кому какие права назначены:
# Получить всех менеджеров с admin правами
curl -X GET $API_URL/managers -H "X-Auth-Token: $API_KEY" \
| jq '.managers[] | select(.isAdmin == true)'
# Проверить, нет ли избыточных прав
curl -X GET $API_URL/managers -H "X-Auth-Token: $API_KEY" \
| jq '.managers[] | select(.isAdmin == true and .isContentAdmin == true and .isSubscriberAdmin == true)'
Удаление уволенных сотрудников¶
Чек-лист при увольнении:
- ☑️ Немедленно удалить учётную запись менеджера
- ☑️ Проверить, не был ли он владельцем портала
- ☑️ Сменить API ключи портала (если имел доступ)
- ☑️ Проверить журнал операций на подозрительные действия
- ☑️ Уведомить команду об изменениях в доступах
#!/bin/bash
# offboard-manager.sh
MANAGER_EMAIL="$1"
MANAGER_ID=$(curl -s -X GET $API_URL/managers -H "X-Auth-Token: $API_KEY" \
| jq -r ".managers[] | select(.email == \"$MANAGER_EMAIL\") | .managerId")
if [ -z "$MANAGER_ID" ]; then
echo "Менеджер не найден"
exit 1
fi
# Удалить менеджера
curl -X DELETE $API_URL/managers/$MANAGER_ID \
-H "X-Auth-Token: $API_KEY"
echo "✅ Менеджер $MANAGER_EMAIL удалён"
# Проверить, не был ли он владельцем
PORTAL=$(curl -s -X GET $API_URL/portal -H "X-Auth-Token: $API_KEY")
OWNER_ID=$(echo $PORTAL | jq -r '.ownerId')
if [ "$OWNER_ID" == "$MANAGER_ID" ]; then
echo "⚠️ ВНИМАНИЕ: Этот менеджер был владельцем портала!"
echo "Обратитесь к администратору системы для назначения нового владельца"
fi
Мониторинг активности менеджеров¶
Отслеживание действий:
Используйте журнал операций для аудита:
# Найти все операции за последние 7 дней
curl -X GET "https://your-catena-domain.com/tv-management/api/v1/operations?created_at_gte=$(date -d '7 days ago' '+%Y-%m-%d')" \
-H "X-Auth-Token: your-api-key" \
| jq '.operations[] | {type, createdAt, payload}'
Метрики для отслеживания:
- Количество операций каждым менеджером
- Время последнего входа
- Подозрительные действия (массовые удаления)
- Неудачные попытки входа
Типичные сценарии настройки прав¶
Только просмотр данных¶
Задача: Дать доступ аналитику для просмотра статистики
Решение:
{
"email": "analyst@company.com",
"name": "Аналитик",
"password": "SecurePass123!",
"isAdmin": false,
"isContentAdmin": false,
"isSubscriberAdmin": false
}
Примечание: Без специальных прав менеджер может только просматривать данные, но не изменять.
Контент-команда¶
Задача: Команда из 3 человек управляет контентом
#!/bin/bash
CONTENT_TEAM=(
"content-lead@company.com:Руководитель контента"
"content-editor1@company.com:Контент-редактор 1"
"content-editor2@company.com:Контент-редактор 2"
)
for MEMBER in "${CONTENT_TEAM[@]}"; do
EMAIL=$(echo $MEMBER | cut -d: -f1)
NAME=$(echo $MEMBER | cut -d: -f2)
curl -X POST $API_URL/managers -H "X-Auth-Token: $OWNER_KEY" -d "{
\"email\": \"$EMAIL\",
\"name\": \"$NAME\",
\"password\": \"TempPassword123!\",
\"isAdmin\": false,
\"isContentAdmin\": true,
\"isSubscriberAdmin\": false
}"
echo "Создан: $NAME ($EMAIL)"
done
Горячая линия поддержки¶
Задача: 10 операторов работают с абонентами посменно
Решение:
- Создать 10 учётных записей с правом
isSubscriberAdmin
- Каждый оператор входит под своим email
- Все действия логируются в журнал операций
- Можно отследить, кто что делал
import requests
def create_support_team(count=10):
"""Создать команду поддержки"""
for i in range(1, count + 1):
requests.post(
f"{API_URL}/managers",
headers={"X-Auth-Token": OWNER_KEY},
json={
"email": f"support{i}@company.com",
"name": f"Оператор поддержки {i}",
"password": generate_secure_password(),
"isAdmin": False,
"isContentAdmin": False,
"isSubscriberAdmin": True
}
)
print(f"Создано {count} операторов поддержки")
create_support_team(10)
Устранение проблем¶
Не могу войти в систему¶
Возможные причины:
- Неверный email или пароль
- Учётная запись удалена
- Учётная запись заблокирована (если есть такая функция)
- Email указан для другого портала
Решение:
- Проверьте правильность email и пароля
- Убедитесь, что вводите email в нижнем регистре
- Попросите владельца проверить наличие вашей учётной записи
- Попробуйте сбросить пароль (если есть функция)
Не вижу нужный раздел в интерфейсе¶
Проблема: Менеджер не видит раздел "Абоненты" или "Каналы"
Причина: Недостаточно прав
Решение:
- Проверьте свои права через GET /managers/{id}
- Попросите владельца или администратора назначить нужные права
- Для доступа к абонентам нужен
isSubscriberAdmin: true
- Для доступа к каналам нужен
isContentAdmin: true
Не могу создать другого менеджера¶
Проблема: API возвращает ошибку при попытке создать менеджера
Причины:
- У вас нет права
isAdmin: true
- Вы не являетесь владельцем портала
- Email уже используется в этом портале
Решение:
- Проверьте свои права
- Только владелец и администраторы могут создавать менеджеров
- Используйте уникальный email для каждого менеджера в портале
Не могу изменить владельца портала¶
Проблема: Хочу сменить ownerId, но API не позволяет
Это правильное поведение:
- Владелец портала управляется вне Management API
- Смена владельца — критичная операция
- Требует обращения к администратору системы Catena
- Не может быть выполнена самостоятельно
Процедура смены владельца:
- Обратитесь в техническую поддержку Catena
- Предоставьте:
- Portal ID
- Текущий owner ID
- Новый owner ID (или создайте нового менеджера заранее)
- Обоснование смены
- Администратор выполнит смену на уровне системы
- Новый владелец получит полный доступ
Безопасность¶
Двухфакторная аутентификация (2FA)¶
Рекомендация: Если ваша установка Catena поддерживает 2FA, включите её для всех менеджеров, особенно с правами isAdmin
.
Аудит доступа¶
Регулярно проверяйте:
#!/bin/bash
# audit-managers.sh
echo "=== Аудит менеджеров портала ==="
echo ""
# Получить всех менеджеров
MANAGERS=$(curl -s -X GET $API_URL/managers -H "X-Auth-Token: $API_KEY")
# Подсчитать по правам
ADMINS=$(echo $MANAGERS | jq '[.managers[] | select(.isAdmin == true)] | length')
CONTENT_ADMINS=$(echo $MANAGERS | jq '[.managers[] | select(.isContentAdmin == true)] | length')
SUBSCRIBER_ADMINS=$(echo $MANAGERS | jq '[.managers[] | select(.isSubscriberAdmin == true)] | length')
TOTAL=$(echo $MANAGERS | jq '.managers | length')
echo "Всего менеджеров: $TOTAL"
echo "Администраторов: $ADMINS"
echo "Контент-менеджеров: $CONTENT_ADMINS"
echo "Менеджеров абонентов: $SUBSCRIBER_ADMINS"
echo ""
# Список администраторов
echo "Администраторы (полный доступ):"
echo $MANAGERS | jq -r '.managers[] | select(.isAdmin == true) | " - \(.name) (\(.email))"'
Ротация паролей¶
Политика:
- Менять пароли каждые 90 дней
- Не использовать предыдущие 5 паролей
- Уведомлять менеджеров за неделю до истечения
Скрипт напоминания:
from datetime import datetime, timedelta
def check_password_expiry():
"""Проверить устаревшие пароли"""
managers = get_managers()
warnings = []
for manager in managers:
# Время последнего обновления = время смены пароля
updated = datetime.fromisoformat(manager['updatedAt'].replace('Z', '+00:00'))
days_since_update = (datetime.now(updated.tzinfo) - updated).days
if days_since_update > 90:
warnings.append({
'manager': manager['email'],
'days': days_since_update,
'severity': 'expired'
})
elif days_since_update > 83: # За неделю
warnings.append({
'manager': manager['email'],
'days': days_since_update,
'severity': 'expiring_soon'
})
# Отправить уведомления
for warning in warnings:
if warning['severity'] == 'expired':
send_email(
to=warning['manager'],
subject="⚠️ Пароль устарел",
body=f"Ваш пароль не менялся {warning['days']} дней. Смените его немедленно."
)
else:
send_email(
to=warning['manager'],
subject="ℹ️ Напоминание о смене пароля",
body=f"Ваш пароль устареет через {90 - warning['days']} дней."
)
return warnings
См. также¶
- Управление порталами — владелец портала и его роль
- Журнал операций — аудит действий менеджеров
- Управление абонентами — что могут делать менеджеры с правом isSubscriberAdmin
- Управление каналами — что могут делать менеджеры с правом isContentAdmin