Ring Platform Logo

    Loading Documentation Hub...

    Scanning documentation library

    Documentation

    Вітаємо — місія та аудиторії

    Ласкаво просимо до Ring Platform - Врата між Людством та Квантовим Світом

    Хаб бібліотеки

    Ласкаво просимо до Ring Platform — Врата між Людством і Квантовим Світом

    Початок роботи

    Індекс
    Передумови
    Встановлення
    Міграції бази даних
    Валідація першого успіху
    Усунення несправностей
    Next Steps

    Архітектура

    Index
    Режими бекенду та бази даних
    Data Model
    Архітектура Аутентифікації
    Архітектура Email AI-CRM
    Архітектура PaymentConductor
    Архітектура Refcodes
    Архітектура News Kingdom
    Proxy та інтернаціоналізація
    Real Time
    Security

    Функції

    Індекс
    Authentication
    Email AI-CRM
    Сутності
    Можливості
    Повідомлення
    Notifications
    Push-сповіщення через FCM (Ring)
    Web3 Гаманець
    Магазин
    Ring ERP
    Склад і залишки

    API-інтерфейс

    Індекс
    Аутентифікація
    Email AI-CRM API
    Entities
    Можливості
    API повідомлень
    API повідомлень
    Гаманець
    API магазину

    CLI

    Ring CLI (лише enterprise)

    Кастомізація

    Індекс
    Брендування
    Функції
    Локалізація
    Теми
    Компоненти

    Розгортання

    Index
    Self-hosted розгортання
    Vercel
    Docker
    Environment
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення

    Розробка

    Розробка
    Локальне налаштування
    Структура коду
    Community tooling
    Ring MCP Server
    Генеративні зображення (ImageConductor)
    Автономна редакція (Grok)
    OSS vs enterprise

    Дорожня карта

    Дорожня карта платформи (технічна)

    Приклади

    Приклади
    Швидкий старт
    Автентифікація
    Email AI-CRM — туторіал
    Інтеграція API
    Інтеграція Web3
    Білий лейбл
    Реальні приклади

    Інтеграції

    Ethereum гаманці (Wagmi v3)

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

    Хаб бібліотеки
    Вітаємо — місія та аудиторії
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Деплой (Docker · k8s)
    Безпека та відповідність
    Ring Platform Logo

    Loading Documentation Hub...

    Scanning documentation library

    Documentation

    Вітаємо — місія та аудиторії

    Ласкаво просимо до Ring Platform - Врата між Людством та Квантовим Світом

    Хаб бібліотеки

    Ласкаво просимо до Ring Platform — Врата між Людством і Квантовим Світом

    Початок роботи

    Індекс
    Передумови
    Встановлення
    Міграції бази даних
    Валідація першого успіху
    Усунення несправностей
    Next Steps

    Архітектура

    Index
    Режими бекенду та бази даних
    Data Model
    Архітектура Аутентифікації
    Архітектура Email AI-CRM
    Архітектура PaymentConductor
    Архітектура Refcodes
    Архітектура News Kingdom

    Функції

    Індекс
    Authentication
    Email AI-CRM
    Сутності
    Можливості
    Повідомлення
    Notifications
    Push-сповіщення через FCM (Ring)

    API-інтерфейс

    Індекс
    Аутентифікація
    Email AI-CRM API
    Entities
    Можливості
    API повідомлень
    API повідомлень
    Гаманець
    API магазину

    CLI

    Ring CLI (лише enterprise)

    Кастомізація

    Індекс
    Брендування
    Функції
    Локалізація
    Теми
    Компоненти

    Розгортання

    Index
    Self-hosted розгортання
    Vercel
    Docker
    Environment
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення

    Розробка

    Розробка
    Локальне налаштування
    Структура коду
    Community tooling
    Ring MCP Server
    Генеративні зображення (ImageConductor)
    Автономна редакція (Grok)
    OSS vs enterprise

    Дорожня карта

    Дорожня карта платформи (технічна)

    Приклади

    Приклади
    Швидкий старт
    Автентифікація
    Email AI-CRM — туторіал
    Інтеграція API
    Інтеграція Web3
    Білий лейбл
    Реальні приклади

    Інтеграції

    Ethereum гаманці (Wagmi v3)

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

    Хаб бібліотеки
    Вітаємо — місія та аудиторії
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Деплой (Docker · k8s)
    Безпека та відповідність
    Ring Platform Logo

    Loading Documentation Hub...

    Scanning documentation library

    Documentation

    Вітаємо — місія та аудиторії

    Ласкаво просимо до Ring Platform - Врата між Людством та Квантовим Світом

    Хаб бібліотеки

    Ласкаво просимо до Ring Platform — Врата між Людством і Квантовим Світом

    Початок роботи

    Індекс
    Передумови
    Встановлення
    Міграції бази даних
    Валідація першого успіху
    Усунення несправностей
    Next Steps

    Архітектура

    Index
    Режими бекенду та бази даних
    Data Model
    Архітектура Аутентифікації
    Архітектура Email AI-CRM
    Архітектура PaymentConductor
    Архітектура Refcodes
    Архітектура News Kingdom

    Функції

    Індекс
    Authentication
    Email AI-CRM
    Сутності
    Можливості
    Повідомлення
    Notifications
    Push-сповіщення через FCM (Ring)

    API-інтерфейс

    Індекс
    Аутентифікація
    Email AI-CRM API
    Entities
    Можливості
    API повідомлень
    API повідомлень
    Гаманець
    API магазину

    CLI

    Ring CLI (лише enterprise)

    Кастомізація

    Індекс
    Брендування
    Функції
    Локалізація
    Теми
    Компоненти

    Розгортання

    Index
    Self-hosted розгортання
    Vercel
    Docker
    Environment
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення

    Розробка

    Розробка
    Локальне налаштування
    Структура коду
    Community tooling
    Ring MCP Server
    Генеративні зображення (ImageConductor)
    Автономна редакція (Grok)
    OSS vs enterprise

    Дорожня карта

    Дорожня карта платформи (технічна)

    Приклади

    Приклади
    Швидкий старт
    Автентифікація
    Email AI-CRM — туторіал
    Інтеграція API
    Інтеграція Web3
    Білий лейбл
    Реальні приклади

    Інтеграції

    Ethereum гаманці (Wagmi v3)

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

    Хаб бібліотеки
    Вітаємо — місія та аудиторії
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Деплой (Docker · k8s)
    Безпека та відповідність

    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НіФільтр за статусом: active, suspended, banned
    verifiedbooleanНіФільтр за статусом верифікації email
    createdAfterstringНіISO дата - користувачі створені після цієї дати
    createdBeforestringНіISO дата - користувачі створені до цієї дати
    lastLoginAfterstringНіISO дата - користувачі увійшли після цієї дати
    sortBystringНіСортувати за: createdAt, lastLogin, name, email
    sortOrderstringНіПорядок сортування: asc, desc (за замовчуванням: desc)

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

    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"

    Відповідь

    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НіФільтр за користувачем, на якого вплинула дія
    startDatestringНіISO дата - логи після цієї дати
    endDatestringНіISO дата - логи до цієї дати

    Відповідь

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

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

    // components/admin/AdminDashboard.tsx

    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>
      )
    }

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

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

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

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

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

    • Багаторівнева аутентифікація: Адмін операції вимагають свіжої аутентифікації
    • Валідація сесій: Адмін сесії валідуються при кожному запиті
    • Обмеження 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НіФільтр за статусом: active, suspended, banned
    verifiedbooleanНіФільтр за статусом верифікації email
    createdAfterstringНіISO дата - користувачі створені після цієї дати
    createdBeforestringНіISO дата - користувачі створені до цієї дати
    lastLoginAfterstringНіISO дата - користувачі увійшли після цієї дати
    sortBystringНіСортувати за: createdAt, lastLogin, name, email
    sortOrderstringНіПорядок сортування: asc, desc (за замовчуванням: desc)

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

    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"

    Відповідь

    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НіФільтр за користувачем, на якого вплинула дія
    startDatestringНіISO дата - логи після цієї дати
    endDatestringНіISO дата - логи до цієї дати

    Відповідь

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

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

    // components/admin/AdminDashboard.tsx

    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>
      )
    }

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

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

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

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

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

    • Багаторівнева аутентифікація: Адмін операції вимагають свіжої аутентифікації
    • Валідація сесій: Адмін сесії валідуються при кожному запиті
    • Обмеження 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НіФільтр за статусом: active, suspended, banned
    verifiedbooleanНіФільтр за статусом верифікації email
    createdAfterstringНіISO дата - користувачі створені після цієї дати
    createdBeforestringНіISO дата - користувачі створені до цієї дати
    lastLoginAfterstringНіISO дата - користувачі увійшли після цієї дати
    sortBystringНіСортувати за: createdAt, lastLogin, name, email
    sortOrderstringНіПорядок сортування: asc, desc (за замовчуванням: desc)

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

    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"

    Відповідь

    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НіФільтр за користувачем, на якого вплинула дія
    startDatestringНіISO дата - логи після цієї дати
    endDatestringНіISO дата - логи до цієї дати

    Відповідь

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

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

    // components/admin/AdminDashboard.tsx

    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>
      )
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

    Керування вендорами
    Комісії та розрахунки
    Реферальні коди (Refcodes)
    Інтеграція платежів
    PaymentConductor
    Інтеграція WayForPay
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Науковий редактор
    Система локалей
    Безпека та відповідність
    NFT Маркетплейс
    Система Стейкінга Токенів
    Паттерни Оптимізації Продуктивності
    Мобільний Досвід
    API адміністратора
    Найкращі практики
    Workflow
    Code Style
    Performance
    Тестування
    Розгортання
    Налагодження
    Співпраця
    Приклади API
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    Proxy та інтернаціоналізація
    Real Time
    Security
    Web3 Гаманець
    Магазин
    Ring ERP
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    Реферальні коди (Refcodes)
    Інтеграція платежів
    PaymentConductor
    Інтеграція WayForPay
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Науковий редактор
    Система локалей
    Безпека та відповідність
    NFT Маркетплейс
    Система Стейкінга Токенів
    Паттерни Оптимізації Продуктивності
    Мобільний Досвід
    API адміністратора
    Найкращі практики
    Workflow
    Code Style
    Performance
    Тестування
    Розгортання
    Налагодження
    Співпраця
    Приклади API
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    Proxy та інтернаціоналізація
    Real Time
    Security
    Web3 Гаманець
    Магазин
    Ring ERP
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    Реферальні коди (Refcodes)
    Інтеграція платежів
    PaymentConductor
    Інтеграція WayForPay
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Науковий редактор
    Система локалей
    Безпека та відповідність
    NFT Маркетплейс
    Система Стейкінга Токенів
    Паттерни Оптимізації Продуктивності
    Мобільний Досвід
    API адміністратора
    Найкращі практики
    Workflow
    Code Style
    Performance
    Тестування
    Розгортання
    Налагодження
    Співпраця
    Приклади API
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    Назад
    Назад
    Назад