Skip to content

Управление менеджерами портала

Менеджеры — это пользователи, которые имеют доступ к панели управления портала в 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

Создание менеджера

Через веб-интерфейс

  1. Откройте раздел "Менеджеры" в панели управления
  2. Нажмите "Создать менеджера"
  3. Заполните обязательные поля:
  4. Email — адрес электронной почты
  5. Name — имя или идентификатор
  6. Password — пароль для входа
  7. Настройте права доступа:
  8. ☑️ isAdmin — администратор инфраструктуры
  9. ☑️ isContentAdmin — управление контентом
  10. ☑️ isSubscriberAdmin — управление абонентами
  11. Сохраните менеджера

Важно: Только владелец портала и менеджеры с правом 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 из списка.

Редактирование менеджера

Через веб-интерфейс

  1. Откройте список менеджеров
  2. Найдите нужного менеджера и нажмите "Редактировать"
  3. Измените параметры:
  4. Имя
  5. Email (с осторожностью)
  6. Права доступа
  7. Пароль (если нужно сменить)
  8. Сохраните изменения

Ограничения:

  • Владелец портала не может изменить свои права (они управляются снаружи)
  • Менеджер не может изменить собственные права (только владелец или 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, старый пароль сохранится
  • При смене пароля менеджер должен будет войти заново

Удаление менеджера

Через веб-интерфейс

  1. Откройте список менеджеров
  2. Найдите менеджера для удаления
  3. Нажмите "Удалить"
  4. Подтвердите удаление

Предупреждение:

  • Нельзя удалить владельца портала
  • Нельзя удалить последнего администратора
  • Менеджер немедленно потеряет доступ к системе

Через 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: Разделение обязанностей

Задача: Распределить работу между специалистами

Команда:

  1. Владелец портала (owner@company.com)
  2. Стратегические решения
  3. Назначение менеджеров
  4. Контроль финансов

  5. Технический директор (tech@company.com)

  6. isAdmin: true
  7. Настройка серверов
  8. Мониторинг инфраструктуры
  9. Создание других менеджеров

  10. Контент-менеджер (content@company.com)

  11. isContentAdmin: true
  12. Добавление новых каналов
  13. Создание пакетов
  14. Настройка EPG

  15. Менеджер клиентского сервиса (support@company.com)

  16. isSubscriberAdmin: true
  17. Работа с абонентами
  18. Управление подписками
  19. Решение проблем клиентов

Создание команды:

#!/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: Временный доступ

Задача: Предоставить временный доступ подрядчику

Решение:

  1. Создать менеджера с ограниченными правами
  2. После завершения работ удалить учётную запись
# Создать временного менеджера
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)'

Удаление уволенных сотрудников

Чек-лист при увольнении:

  1. ☑️ Немедленно удалить учётную запись менеджера
  2. ☑️ Проверить, не был ли он владельцем портала
  3. ☑️ Сменить API ключи портала (если имел доступ)
  4. ☑️ Проверить журнал операций на подозрительные действия
  5. ☑️ Уведомить команду об изменениях в доступах
#!/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 операторов работают с абонентами посменно

Решение:

  1. Создать 10 учётных записей с правом isSubscriberAdmin
  2. Каждый оператор входит под своим email
  3. Все действия логируются в журнал операций
  4. Можно отследить, кто что делал
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)

Устранение проблем

Не могу войти в систему

Возможные причины:

  1. Неверный email или пароль
  2. Учётная запись удалена
  3. Учётная запись заблокирована (если есть такая функция)
  4. Email указан для другого портала

Решение:

  1. Проверьте правильность email и пароля
  2. Убедитесь, что вводите email в нижнем регистре
  3. Попросите владельца проверить наличие вашей учётной записи
  4. Попробуйте сбросить пароль (если есть функция)

Не вижу нужный раздел в интерфейсе

Проблема: Менеджер не видит раздел "Абоненты" или "Каналы"

Причина: Недостаточно прав

Решение:

  1. Проверьте свои права через GET /managers/{id}
  2. Попросите владельца или администратора назначить нужные права
  3. Для доступа к абонентам нужен isSubscriberAdmin: true
  4. Для доступа к каналам нужен isContentAdmin: true

Не могу создать другого менеджера

Проблема: API возвращает ошибку при попытке создать менеджера

Причины:

  • У вас нет права isAdmin: true
  • Вы не являетесь владельцем портала
  • Email уже используется в этом портале

Решение:

  1. Проверьте свои права
  2. Только владелец и администраторы могут создавать менеджеров
  3. Используйте уникальный email для каждого менеджера в портале

Не могу изменить владельца портала

Проблема: Хочу сменить ownerId, но API не позволяет

Это правильное поведение:

  • Владелец портала управляется вне Management API
  • Смена владельца — критичная операция
  • Требует обращения к администратору системы Catena
  • Не может быть выполнена самостоятельно

Процедура смены владельца:

  1. Обратитесь в техническую поддержку Catena
  2. Предоставьте:
  3. Portal ID
  4. Текущий owner ID
  5. Новый owner ID (или создайте нового менеджера заранее)
  6. Обоснование смены
  7. Администратор выполнит смену на уровне системы
  8. Новый владелец получит полный доступ

Безопасность

Двухфакторная аутентификация (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

См. также