Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Інтеграція платежів
    Інтеграція WayForPay
    Web3 Гаманець
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкінга Токенів
    Сутності
    Можливості
    Повідомлення
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безпека та відповідність
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Білий лейбл
    Інтеграція Web3
    Реальні приклади
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Web3
    Token launch jurisdictions
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Архітектура PaymentConductor
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Інтеграція платежів
    Інтеграція WayForPay
    Web3 Гаманець
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкінга Токенів
    Сутності
    Можливості
    Повідомлення
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безпека та відповідність
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Білий лейбл
    Інтеграція Web3
    Реальні приклади
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Web3
    Token launch jurisdictions
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Архітектура PaymentConductor
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Інтеграція платежів
    Інтеграція WayForPay
    Web3 Гаманець
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкінга Токенів
    Сутності
    Можливості
    Повідомлення
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безпека та відповідність
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Білий лейбл
    Інтеграція Web3
    Реальні приклади
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Web3
    Token launch jurisdictions
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Архітектура PaymentConductor
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    1. Документація
    2. /API-інтерфейс
    3. /API адміністратора

    Оновлено 16 жовт. 2025 р.5 хв прослуховування

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Документація
    2. /API-інтерфейс
    3. /API адміністратора

    Оновлено 16 жовт. 2025 р.5 хв прослуховування

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Документація
    2. /API-інтерфейс
    3. /API адміністратора

    Оновлено 16 жовт. 2025 р.5 хв прослуховування

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    API адміністратора

    Платформа Ring надає комплексний адміністративний API із 12 захищеними кінцевими точками для управління системою, адміністрування користувачів, доступу до аналітики та контролю конфігурації. Усі адмін кінцеві точки вимагають ролі ADMIN та реалізують заходи безпеки корпоративного рівня.

    🔒 Потрібен адмін доступ

    Усі адмін кінцеві точки вимагають аутентифікації ролі ADMIN та підлягають суворому обмеженню швидкості та логуванню аудитів. Спроби несанкціонованого доступу логуються та можуть спричинити сповіщення безпеки.

    🏗️ Архітектура системи

    Контроль доступу адміністратора

    text
    
    Аутентифікація → Перевірка ролі → Перевірка дозволів → Логування дій → Відповідь

    Функції безпеки

    • Контроль доступу на основі ролей: Багаторівнева система дозволів
    • Логування аудитів: Усі адмін дії логуються з мітками часу та контекстом користувача
    • Обмеження швидкості: Адмін кінцеві точки мають суворіші обмеження швидкості (100 запитів/годину проти 1000 запитів/годину для звичайних користувачів)
    • Фільтри IP: Необов'язкові обмеження доступу на основі IP
    • Двофакторна аутентифікація: Обов'язкова для конфіденційних операцій
    • Управління сесіями: Адмін сесії мають коротші таймаути (1 година проти 24 годин)

    Захист даних

    • Шифрування даних у спокої: Конфіденційні адмін дані зашифровані у базі даних
    • Безпечні логи аудитів: Адмін дії логуються до захищеного від підробки сховища
    • Сумісність із GDPR: Обробка адмін даних дотримується суворих правил конфіденційності
    • Збереження даних: Адмін логи зберігаються протягом 7 років для дотримання вимог

    📋 Довідка кінцевих точок API

    GET /api/admin/users

    Список та пошук користувачів платформи із розширеним фільтруванням та пагінацією.

    Параметри

    ПараметрТипОбов'язковийОпис
    pagenumberНіНомер сторінки (за замовчуванням: 1)
    limitnumberНіКористувачів на сторінку (за замовчуванням: 50, макс: 200)
    searchstringНіПошук за ім'ям, email або ім'ям користувача
    rolestringНіФільтр за роллю: visitor, member, confidential, ADMIN
    statusstringНі

    Приклад запиту

    Відповідь

    GET /api/admin/users/{id}

    Отримати детальну інформацію про конкретного користувача.

    Відповідь

    PUT /api/admin/users/{id}/role

    Оновити роль та дозволи користувача.

    Тіло запиту

    Відповідь

    PUT /api/admin/users/{id}/status

    Оновити статус облікового запису користувача (призупинити, заблокувати, активувати).

    Тіло запиту

    Відповідь

    DELETE /api/admin/users/{id}

    Назавжди видалити обліковий запис користувача (відповідність GDPR).

    Параметри

    ПараметрТипОбов'язковийОпис
    anonymizebooleanНіЗамінити дані користувача анонімними плейсхолдерами (за замовчуванням: true)
    deleteContentbooleanНіВидалити весь користувацький контент (за замовчуванням: false)
    reasonstringТакПричина видалення облікового запису

    Тіло запиту

    Відповідь

    GET /api/admin/analytics

    Отримати комплексну аналітику та метрики платформи.

    Параметри

    ПараметрТипОбов'язковийОпис
    periodstringНіПеріод часу: hour, day, week, month, year (за замовчуванням: week)
    startDatestringНіISO дата для власного діапазону
    endDatestringНіISO дата для власного діапазону
    metricsstring[]НіКонкретні метрики для включення

    Відповідь

    GET /api/admin/analytics/users

    Отримати детальну аналітику користувачів.

    Параметри

    ПараметрТипОбов'язковийОпис
    groupBystringНіГрупувати результати за: day, week, month, role, status
    includeInactivebooleanНіВключити неактивних користувачів у результати (за замовчуванням: false)

    GET /api/admin/config

    Отримати поточні налаштування конфігурації системи.

    Відповідь

    PUT /api/admin/config

    Оновити налаштування конфігурації системи.

    Тіло запиту

    Відповідь

    POST /api/admin/config/rollback

    Відкатити зміни конфігурації.

    Тіло запиту

    GET /api/admin/audit

    Отримати логи аудитів для адмін дій.

    Параметри

    ПараметрТипОбов'язковийОпис
    pagenumberНіНомер сторінки (за замовчуванням: 1)
    limitnumberНіЛогів на сторінку (за замовчуванням: 50)
    actionstringНіФільтр за типом дії
    userIdstringНіФільтр за користувачем, який виконав дію
    targetUserIdstringНіФільтр за користувачем, на якого вплинула дія

    Відповідь

    🔧 Приклади реалізації

    Компонент адмін дашборду

    // components/admin/AdminDashboard.tsx

    🚨 Обробка помилок

    Поширені відповіді про помилки адміністратора

    // Недостатні дозволи

    🔒 Заходи безпеки

    Контроль доступу

    • Багаторівнева аутентифікація: Адмін операції вимагають свіжої аутентифікації
    • Валідація сесій: Адмін сесії валідуються при кожному запиті
    • Обмеження IP: Необов'язкові фільтри доступу на основі IP
    • Часовий доступ: Адмін операції обмежені у певні години

    Аудит та відповідність

    • Повний слід аудиту: Кожна адмін дія логується з повним контекстом
    • Відповідність GDPR: Обробка адмін даних дотримується правил конфіденційності
    • Збереження даних: Адмін логи зберігаються протягом 7 років
    • Виявлення підробки: Криптографічні підписи на логах аудиту

    Операційна безпека

    • Принцип найменших привілеїв: Адміни отримують тільки необхідні дозволи
    • Правило двох осіб: Критичні операції вимагають вторинного затвердження
    • Надзвичайний доступ: Процедури break-glass для відновлення системи
    • Моніторинг безпеки: Моніторинг активності адмінів у режимі реального часу

    📊 Моніторинг та аналітика

    Активність адміністратора

    // Відстеження адмін дій для моніторингу

    🎛️ Конфігурація

    Змінні середовища

    Безпека адміністратора Логування аудиту Захист системи Моніторинг

    Схема бази даних


    Адмін API платформи Ring забезпечує корпоративний контроль із комплексною безпекою, слідами аудиту та операційним моніторингом.

    API адміністратора

    Платформа Ring надає комплексний адміністративний API із 12 захищеними кінцевими точками для управління системою, адміністрування користувачів, доступу до аналітики та контролю конфігурації. Усі адмін кінцеві точки вимагають ролі ADMIN та реалізують заходи безпеки корпоративного рівня.

    🔒 Потрібен адмін доступ

    Усі адмін кінцеві точки вимагають аутентифікації ролі ADMIN та підлягають суворому обмеженню швидкості та логуванню аудитів. Спроби несанкціонованого доступу логуються та можуть спричинити сповіщення безпеки.

    🏗️ Архітектура системи

    Контроль доступу адміністратора

    text
    
    Аутентифікація → Перевірка ролі → Перевірка дозволів → Логування дій → Відповідь

    Функції безпеки

    • Контроль доступу на основі ролей: Багаторівнева система дозволів
    • Логування аудитів: Усі адмін дії логуються з мітками часу та контекстом користувача
    • Обмеження швидкості: Адмін кінцеві точки мають суворіші обмеження швидкості (100 запитів/годину проти 1000 запитів/годину для звичайних користувачів)
    • Фільтри IP: Необов'язкові обмеження доступу на основі IP
    • Двофакторна аутентифікація: Обов'язкова для конфіденційних операцій
    • Управління сесіями: Адмін сесії мають коротші таймаути (1 година проти 24 годин)

    Захист даних

    • Шифрування даних у спокої: Конфіденційні адмін дані зашифровані у базі даних
    • Безпечні логи аудитів: Адмін дії логуються до захищеного від підробки сховища
    • Сумісність із GDPR: Обробка адмін даних дотримується суворих правил конфіденційності
    • Збереження даних: Адмін логи зберігаються протягом 7 років для дотримання вимог

    📋 Довідка кінцевих точок API

    GET /api/admin/users

    Список та пошук користувачів платформи із розширеним фільтруванням та пагінацією.

    Параметри

    ПараметрТипОбов'язковийОпис
    pagenumberНіНомер сторінки (за замовчуванням: 1)
    limitnumberНіКористувачів на сторінку (за замовчуванням: 50, макс: 200)
    searchstringНіПошук за ім'ям, email або ім'ям користувача
    rolestringНіФільтр за роллю: visitor, member, confidential, ADMIN
    statusstringНі

    Приклад запиту

    Відповідь

    GET /api/admin/users/{id}

    Отримати детальну інформацію про конкретного користувача.

    Відповідь

    PUT /api/admin/users/{id}/role

    Оновити роль та дозволи користувача.

    Тіло запиту

    Відповідь

    PUT /api/admin/users/{id}/status

    Оновити статус облікового запису користувача (призупинити, заблокувати, активувати).

    Тіло запиту

    Відповідь

    DELETE /api/admin/users/{id}

    Назавжди видалити обліковий запис користувача (відповідність GDPR).

    Параметри

    ПараметрТипОбов'язковийОпис
    anonymizebooleanНіЗамінити дані користувача анонімними плейсхолдерами (за замовчуванням: true)
    deleteContentbooleanНіВидалити весь користувацький контент (за замовчуванням: false)
    reasonstringТакПричина видалення облікового запису

    Тіло запиту

    Відповідь

    GET /api/admin/analytics

    Отримати комплексну аналітику та метрики платформи.

    Параметри

    ПараметрТипОбов'язковийОпис
    periodstringНіПеріод часу: hour, day, week, month, year (за замовчуванням: week)
    startDatestringНіISO дата для власного діапазону
    endDatestringНіISO дата для власного діапазону
    metricsstring[]НіКонкретні метрики для включення

    Відповідь

    GET /api/admin/analytics/users

    Отримати детальну аналітику користувачів.

    Параметри

    ПараметрТипОбов'язковийОпис
    groupBystringНіГрупувати результати за: day, week, month, role, status
    includeInactivebooleanНіВключити неактивних користувачів у результати (за замовчуванням: false)

    GET /api/admin/config

    Отримати поточні налаштування конфігурації системи.

    Відповідь

    PUT /api/admin/config

    Оновити налаштування конфігурації системи.

    Тіло запиту

    Відповідь

    POST /api/admin/config/rollback

    Відкатити зміни конфігурації.

    Тіло запиту

    GET /api/admin/audit

    Отримати логи аудитів для адмін дій.

    Параметри

    ПараметрТипОбов'язковийОпис
    pagenumberНіНомер сторінки (за замовчуванням: 1)
    limitnumberНіЛогів на сторінку (за замовчуванням: 50)
    actionstringНіФільтр за типом дії
    userIdstringНіФільтр за користувачем, який виконав дію
    targetUserIdstringНіФільтр за користувачем, на якого вплинула дія

    Відповідь

    🔧 Приклади реалізації

    Компонент адмін дашборду

    // components/admin/AdminDashboard.tsx

    🚨 Обробка помилок

    Поширені відповіді про помилки адміністратора

    // Недостатні дозволи

    🔒 Заходи безпеки

    Контроль доступу

    • Багаторівнева аутентифікація: Адмін операції вимагають свіжої аутентифікації
    • Валідація сесій: Адмін сесії валідуються при кожному запиті
    • Обмеження IP: Необов'язкові фільтри доступу на основі IP
    • Часовий доступ: Адмін операції обмежені у певні години

    Аудит та відповідність

    • Повний слід аудиту: Кожна адмін дія логується з повним контекстом
    • Відповідність GDPR: Обробка адмін даних дотримується правил конфіденційності
    • Збереження даних: Адмін логи зберігаються протягом 7 років
    • Виявлення підробки: Криптографічні підписи на логах аудиту

    Операційна безпека

    • Принцип найменших привілеїв: Адміни отримують тільки необхідні дозволи
    • Правило двох осіб: Критичні операції вимагають вторинного затвердження
    • Надзвичайний доступ: Процедури break-glass для відновлення системи
    • Моніторинг безпеки: Моніторинг активності адмінів у режимі реального часу

    📊 Моніторинг та аналітика

    Активність адміністратора

    // Відстеження адмін дій для моніторингу

    🎛️ Конфігурація

    Змінні середовища

    Безпека адміністратора Логування аудиту Захист системи Моніторинг

    Схема бази даних


    Адмін API платформи Ring забезпечує корпоративний контроль із комплексною безпекою, слідами аудиту та операційним моніторингом.

    API адміністратора

    Платформа Ring надає комплексний адміністративний API із 12 захищеними кінцевими точками для управління системою, адміністрування користувачів, доступу до аналітики та контролю конфігурації. Усі адмін кінцеві точки вимагають ролі ADMIN та реалізують заходи безпеки корпоративного рівня.

    🔒 Потрібен адмін доступ

    Усі адмін кінцеві точки вимагають аутентифікації ролі ADMIN та підлягають суворому обмеженню швидкості та логуванню аудитів. Спроби несанкціонованого доступу логуються та можуть спричинити сповіщення безпеки.

    🏗️ Архітектура системи

    Контроль доступу адміністратора

    text
    
    Аутентифікація → Перевірка ролі → Перевірка дозволів → Логування дій → Відповідь

    Функції безпеки

    • Контроль доступу на основі ролей: Багаторівнева система дозволів
    • Логування аудитів: Усі адмін дії логуються з мітками часу та контекстом користувача
    • Обмеження швидкості: Адмін кінцеві точки мають суворіші обмеження швидкості (100 запитів/годину проти 1000 запитів/годину для звичайних користувачів)
    • Фільтри IP: Необов'язкові обмеження доступу на основі IP
    • Двофакторна аутентифікація: Обов'язкова для конфіденційних операцій
    • Управління сесіями: Адмін сесії мають коротші таймаути (1 година проти 24 годин)

    Захист даних

    • Шифрування даних у спокої: Конфіденційні адмін дані зашифровані у базі даних
    • Безпечні логи аудитів: Адмін дії логуються до захищеного від підробки сховища
    • Сумісність із GDPR: Обробка адмін даних дотримується суворих правил конфіденційності
    • Збереження даних: Адмін логи зберігаються протягом 7 років для дотримання вимог

    📋 Довідка кінцевих точок API

    GET /api/admin/users

    Список та пошук користувачів платформи із розширеним фільтруванням та пагінацією.

    Параметри

    ПараметрТипОбов'язковийОпис
    pagenumberНіНомер сторінки (за замовчуванням: 1)
    limitnumberНіКористувачів на сторінку (за замовчуванням: 50, макс: 200)
    searchstringНіПошук за ім'ям, email або ім'ям користувача
    rolestringНіФільтр за роллю: visitor, member, confidential, ADMIN
    statusstringНі

    Приклад запиту

    Відповідь

    GET /api/admin/users/{id}

    Отримати детальну інформацію про конкретного користувача.

    Відповідь

    PUT /api/admin/users/{id}/role

    Оновити роль та дозволи користувача.

    Тіло запиту

    Відповідь

    PUT /api/admin/users/{id}/status

    Оновити статус облікового запису користувача (призупинити, заблокувати, активувати).

    Тіло запиту

    Відповідь

    DELETE /api/admin/users/{id}

    Назавжди видалити обліковий запис користувача (відповідність GDPR).

    Параметри

    ПараметрТипОбов'язковийОпис
    anonymizebooleanНіЗамінити дані користувача анонімними плейсхолдерами (за замовчуванням: true)
    deleteContentbooleanНіВидалити весь користувацький контент (за замовчуванням: false)
    reasonstringТакПричина видалення облікового запису

    Тіло запиту

    Відповідь

    GET /api/admin/analytics

    Отримати комплексну аналітику та метрики платформи.

    Параметри

    ПараметрТипОбов'язковийОпис
    periodstringНіПеріод часу: hour, day, week, month, year (за замовчуванням: week)
    startDatestringНіISO дата для власного діапазону
    endDatestringНіISO дата для власного діапазону
    metricsstring[]НіКонкретні метрики для включення

    Відповідь

    GET /api/admin/analytics/users

    Отримати детальну аналітику користувачів.

    Параметри

    ПараметрТипОбов'язковийОпис
    groupBystringНіГрупувати результати за: day, week, month, role, status
    includeInactivebooleanНіВключити неактивних користувачів у результати (за замовчуванням: false)

    GET /api/admin/config

    Отримати поточні налаштування конфігурації системи.

    Відповідь

    PUT /api/admin/config

    Оновити налаштування конфігурації системи.

    Тіло запиту

    Відповідь

    POST /api/admin/config/rollback

    Відкатити зміни конфігурації.

    Тіло запиту

    GET /api/admin/audit

    Отримати логи аудитів для адмін дій.

    Параметри

    ПараметрТипОбов'язковийОпис
    pagenumberНіНомер сторінки (за замовчуванням: 1)
    limitnumberНіЛогів на сторінку (за замовчуванням: 50)
    actionstringНіФільтр за типом дії
    userIdstringНіФільтр за користувачем, який виконав дію
    targetUserIdstringНіФільтр за користувачем, на якого вплинула дія

    Відповідь

    🔧 Приклади реалізації

    Компонент адмін дашборду

    // components/admin/AdminDashboard.tsx

    🚨 Обробка помилок

    Поширені відповіді про помилки адміністратора

    // Недостатні дозволи

    🔒 Заходи безпеки

    Контроль доступу

    • Багаторівнева аутентифікація: Адмін операції вимагають свіжої аутентифікації
    • Валідація сесій: Адмін сесії валідуються при кожному запиті
    • Обмеження IP: Необов'язкові фільтри доступу на основі IP
    • Часовий доступ: Адмін операції обмежені у певні години

    Аудит та відповідність

    • Повний слід аудиту: Кожна адмін дія логується з повним контекстом
    • Відповідність GDPR: Обробка адмін даних дотримується правил конфіденційності
    • Збереження даних: Адмін логи зберігаються протягом 7 років
    • Виявлення підробки: Криптографічні підписи на логах аудиту

    Операційна безпека

    • Принцип найменших привілеїв: Адміни отримують тільки необхідні дозволи
    • Правило двох осіб: Критичні операції вимагають вторинного затвердження
    • Надзвичайний доступ: Процедури break-glass для відновлення системи
    • Моніторинг безпеки: Моніторинг активності адмінів у режимі реального часу

    📊 Моніторинг та аналітика

    Активність адміністратора

    // Відстеження адмін дій для моніторингу

    🎛️ Конфігурація

    Змінні середовища

    Безпека адміністратора Логування аудиту Захист системи Моніторинг

    Схема бази даних


    Адмін API платформи Ring забезпечує корпоративний контроль із комплексною безпекою, слідами аудиту та операційним моніторингом.

    Фільтр за статусом: active, suspended, banned
    verifiedbooleanНіФільтр за статусом верифікації email
    createdAfterstringНіISO дата - користувачі створені після цієї дати
    createdBeforestringНіISO дата - користувачі створені до цієї дати
    lastLoginAfterstringНіISO дата - користувачі увійшли після цієї дати
    sortBystringНіСортувати за: createdAt, lastLogin, name, email
    sortOrderstringНіПорядок сортування: asc, desc (за замовчуванням: desc)
    startDatestringНіISO дата - логи після цієї дати
    endDatestringНіISO дата - логи до цієї дати
    bash
    
    curl -X GET "http://localhost:3000/api/admin/users?page=1&limit=20&role=MEMBER&status=active&sortBy=createdAt&sortOrder=desc" \
      -H "Authorization: Bearer admin-session-token"
    typescript
    
    import { useState, useEffect } from 'react'
    
    interface AdminStats {
      totalUsers: number
      activeUsers: number
      newUsersToday: number
      totalEntities: number
      totalOpportunities: number
      systemHealth: 'healthy' | 'warning' | 'critical'
    }
    
    export function AdminDashboard() {
      const [stats, setStats] = useState<AdminStats | null>(null)
      const [loading, setLoading] = useState(true)
    
      useEffect(() => {
        fetchAdminStats()
      }, [])
    
      const fetchAdminStats = async () => {
        try {
          const [usersRes, analyticsRes] = await Promise.all([
            fetch('/api/admin/users?limit=1'),
            fetch('/api/admin/analytics?period=day')
          ])
    
          const usersData = await usersRes.json()
          const analyticsData = await analyticsRes.json()
    
          setStats({
            totalUsers: usersData.pagination.total,
            activeUsers: analyticsData.userMetrics.activity.dailyActiveUsers,
            newUsersToday: analyticsData.userMetrics.registrations.byDay.slice(-1)[0],
            totalEntities: analyticsData.contentMetrics.entities.active,
            totalOpportunities: analyticsData.contentMetrics.opportunities.posted,
            systemHealth: analyticsData.systemMetrics.performance.errorRate < 0.01 ? 'healthy' :
                         analyticsData.systemMetrics.performance.errorRate < 0.05 ? 'warning' : 'critical'
          })
        } catch (error) {
          console.error('Не вдалося отримати адмін статистику:', error)
        } finally {
          setLoading(false)
        }
      }
    
      if (loading) return <div>Завантаження адмін дашборду...</div>
    
      return (
        <div className="admin-dashboard">
          <h1 className="text-2xl font-bold mb-6">Адмін дашборд</h1>
    
          <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Загалом користувачів</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold">{stats?.totalUsers.toLocaleString()}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Активних сьогодні</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold">{stats?.activeUsers.toLocaleString()}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Нових сьогодні</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold text-green-600">+{stats?.newUsersToday}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Стан системи</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className={`text-2xl font-bold ${
                  stats?.systemHealth === 'healthy' ? 'text-green-600' :
                  stats?.systemHealth === 'warning' ? 'text-yellow-600' : 'text-red-600'
                }`}>
                  {stats?.systemHealth.toUpperCase()}
                </div>
              </UiCardContent>
            </UiCard>
          </div>
    
          {/* Додаткові адмін компоненти */}
          <UserManagement />
          <SystemConfiguration />
          <AuditLogs />
        </div>
      )
    }
    Фільтр за статусом: active, suspended, banned
    verifiedbooleanНіФільтр за статусом верифікації email
    createdAfterstringНіISO дата - користувачі створені після цієї дати
    createdBeforestringНіISO дата - користувачі створені до цієї дати
    lastLoginAfterstringНіISO дата - користувачі увійшли після цієї дати
    sortBystringНіСортувати за: createdAt, lastLogin, name, email
    sortOrderstringНіПорядок сортування: asc, desc (за замовчуванням: desc)
    startDatestringНіISO дата - логи після цієї дати
    endDatestringНіISO дата - логи до цієї дати
    bash
    
    curl -X GET "http://localhost:3000/api/admin/users?page=1&limit=20&role=MEMBER&status=active&sortBy=createdAt&sortOrder=desc" \
      -H "Authorization: Bearer admin-session-token"
    typescript
    
    import { useState, useEffect } from 'react'
    
    interface AdminStats {
      totalUsers: number
      activeUsers: number
      newUsersToday: number
      totalEntities: number
      totalOpportunities: number
      systemHealth: 'healthy' | 'warning' | 'critical'
    }
    
    export function AdminDashboard() {
      const [stats, setStats] = useState<AdminStats | null>(null)
      const [loading, setLoading] = useState(true)
    
      useEffect(() => {
        fetchAdminStats()
      }, [])
    
      const fetchAdminStats = async () => {
        try {
          const [usersRes, analyticsRes] = await Promise.all([
            fetch('/api/admin/users?limit=1'),
            fetch('/api/admin/analytics?period=day')
          ])
    
          const usersData = await usersRes.json()
          const analyticsData = await analyticsRes.json()
    
          setStats({
            totalUsers: usersData.pagination.total,
            activeUsers: analyticsData.userMetrics.activity.dailyActiveUsers,
            newUsersToday: analyticsData.userMetrics.registrations.byDay.slice(-1)[0],
            totalEntities: analyticsData.contentMetrics.entities.active,
            totalOpportunities: analyticsData.contentMetrics.opportunities.posted,
            systemHealth: analyticsData.systemMetrics.performance.errorRate < 0.01 ? 'healthy' :
                         analyticsData.systemMetrics.performance.errorRate < 0.05 ? 'warning' : 'critical'
          })
        } catch (error) {
          console.error('Не вдалося отримати адмін статистику:', error)
        } finally {
          setLoading(false)
        }
      }
    
      if (loading) return <div>Завантаження адмін дашборду...</div>
    
      return (
        <div className="admin-dashboard">
          <h1 className="text-2xl font-bold mb-6">Адмін дашборд</h1>
    
          <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Загалом користувачів</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold">{stats?.totalUsers.toLocaleString()}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Активних сьогодні</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold">{stats?.activeUsers.toLocaleString()}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Нових сьогодні</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold text-green-600">+{stats?.newUsersToday}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Стан системи</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className={`text-2xl font-bold ${
                  stats?.systemHealth === 'healthy' ? 'text-green-600' :
                  stats?.systemHealth === 'warning' ? 'text-yellow-600' : 'text-red-600'
                }`}>
                  {stats?.systemHealth.toUpperCase()}
                </div>
              </UiCardContent>
            </UiCard>
          </div>
    
          {/* Додаткові адмін компоненти */}
          <UserManagement />
          <SystemConfiguration />
          <AuditLogs />
        </div>
      )
    }
    Фільтр за статусом: active, suspended, banned
    verifiedbooleanНіФільтр за статусом верифікації email
    createdAfterstringНіISO дата - користувачі створені після цієї дати
    createdBeforestringНіISO дата - користувачі створені до цієї дати
    lastLoginAfterstringНіISO дата - користувачі увійшли після цієї дати
    sortBystringНіСортувати за: createdAt, lastLogin, name, email
    sortOrderstringНіПорядок сортування: asc, desc (за замовчуванням: desc)
    startDatestringНіISO дата - логи після цієї дати
    endDatestringНіISO дата - логи до цієї дати
    bash
    
    curl -X GET "http://localhost:3000/api/admin/users?page=1&limit=20&role=MEMBER&status=active&sortBy=createdAt&sortOrder=desc" \
      -H "Authorization: Bearer admin-session-token"
    typescript
    
    import { useState, useEffect } from 'react'
    
    interface AdminStats {
      totalUsers: number
      activeUsers: number
      newUsersToday: number
      totalEntities: number
      totalOpportunities: number
      systemHealth: 'healthy' | 'warning' | 'critical'
    }
    
    export function AdminDashboard() {
      const [stats, setStats] = useState<AdminStats | null>(null)
      const [loading, setLoading] = useState(true)
    
      useEffect(() => {
        fetchAdminStats()
      }, [])
    
      const fetchAdminStats = async () => {
        try {
          const [usersRes, analyticsRes] = await Promise.all([
            fetch('/api/admin/users?limit=1'),
            fetch('/api/admin/analytics?period=day')
          ])
    
          const usersData = await usersRes.json()
          const analyticsData = await analyticsRes.json()
    
          setStats({
            totalUsers: usersData.pagination.total,
            activeUsers: analyticsData.userMetrics.activity.dailyActiveUsers,
            newUsersToday: analyticsData.userMetrics.registrations.byDay.slice(-1)[0],
            totalEntities: analyticsData.contentMetrics.entities.active,
            totalOpportunities: analyticsData.contentMetrics.opportunities.posted,
            systemHealth: analyticsData.systemMetrics.performance.errorRate < 0.01 ? 'healthy' :
                         analyticsData.systemMetrics.performance.errorRate < 0.05 ? 'warning' : 'critical'
          })
        } catch (error) {
          console.error('Не вдалося отримати адмін статистику:', error)
        } finally {
          setLoading(false)
        }
      }
    
      if (loading) return <div>Завантаження адмін дашборду...</div>
    
      return (
        <div className="admin-dashboard">
          <h1 className="text-2xl font-bold mb-6">Адмін дашборд</h1>
    
          <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Загалом користувачів</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold">{stats?.totalUsers.toLocaleString()}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Активних сьогодні</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold">{stats?.activeUsers.toLocaleString()}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Нових сьогодні</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className="text-2xl font-bold text-green-600">+{stats?.newUsersToday}</div>
              </UiCardContent>
            </UiCard>
    
            <UiCard>
              <UiCardHeader className="pb-2">
                <UiCardTitle className="text-sm font-medium">Стан системи</UiCardTitle>
              </UiCardHeader>
              <UiCardContent>
                <div className={`text-2xl font-bold ${
                  stats?.systemHealth === 'healthy' ? 'text-green-600' :
                  stats?.systemHealth === 'warning' ? 'text-yellow-600' : 'text-red-600'
                }`}>
                  {stats?.systemHealth.toUpperCase()}
                </div>
              </UiCardContent>
            </UiCard>
          </div>
    
          {/* Додаткові адмін компоненти */}
          <UserManagement />
          <SystemConfiguration />
          <AuditLogs />
        </div>
      )
    }