Ring Platform Logo

    Loading Documentation Hub...

    Scanning documentation library

    Documentation

    Welcome — mission & audiences

    Welcome to Ring Platform - Gateway Between Humanity and the Quantum World

    Library hub

    Welcome to Ring Platform - Gateway Between Humanity and the Quantum World

    Getting Started

    Index
    Prerequisites
    Installation
    Database migrations
    First Success Validation
    Troubleshooting
    Next Steps

    Architecture

    Index
    Backend modes and databases
    Data Model
    Authentication Architecture
    Email AI-CRM Architecture
    PaymentConductor architecture
    Refcodes architecture
    News Kingdom architecture
    Proxy and internationalization
    Real Time
    Security

    Features

    Platform Features
    Authentication
    Email AI-CRM System
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Web3 Wallet
    Multi-Vendor Store
    Ring ERP
    Inventory & Stock
    Vendor Management

    API

    Index
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet
    Store API

    CLI

    Ring CLI (enterprise only)

    Customization

    Index
    Branding
    Features
    Localization
    Themes
    Components

    Deployment

    Index
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery

    Development

    Index
    Local Setup
    Code Structure
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise

    Roadmap

    Platform Roadmap (Technical)

    Examples

    Index
    Quick Start
    Authentication
    Email AI-CRM Tutorial
    Api Integration
    Web3 Integration
    White Label
    Real World

    Integrations

    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Library hub
    Welcome — mission & audiences
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Deploy (Docker · k8s)
    Security & compliance reads
    Ring Platform Logo

    Loading Documentation Hub...

    Scanning documentation library

    Documentation

    Welcome — mission & audiences

    Welcome to Ring Platform - Gateway Between Humanity and the Quantum World

    Library hub

    Welcome to Ring Platform - Gateway Between Humanity and the Quantum World

    Getting Started

    Index
    Prerequisites
    Installation
    Database migrations
    First Success Validation
    Troubleshooting
    Next Steps

    Architecture

    Index
    Backend modes and databases
    Data Model
    Authentication Architecture
    Email AI-CRM Architecture
    PaymentConductor architecture
    Refcodes architecture
    News Kingdom architecture

    Features

    Platform Features
    Authentication
    Email AI-CRM System
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Web3 Wallet

    API

    Index
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet
    Store API

    CLI

    Ring CLI (enterprise only)

    Customization

    Index
    Branding
    Features
    Localization
    Themes
    Components

    Deployment

    Index
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery

    Development

    Index
    Local Setup
    Code Structure
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise

    Roadmap

    Platform Roadmap (Technical)

    Examples

    Index
    Quick Start
    Authentication
    Email AI-CRM Tutorial
    Api Integration
    Web3 Integration
    White Label
    Real World

    Integrations

    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Library hub
    Welcome — mission & audiences
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Deploy (Docker · k8s)
    Security & compliance reads
    Ring Platform Logo

    Loading Documentation Hub...

    Scanning documentation library

    Documentation

    Welcome — mission & audiences

    Welcome to Ring Platform - Gateway Between Humanity and the Quantum World

    Library hub

    Welcome to Ring Platform - Gateway Between Humanity and the Quantum World

    Getting Started

    Index
    Prerequisites
    Installation
    Database migrations
    First Success Validation
    Troubleshooting
    Next Steps

    Architecture

    Index
    Backend modes and databases
    Data Model
    Authentication Architecture
    Email AI-CRM Architecture
    PaymentConductor architecture
    Refcodes architecture
    News Kingdom architecture

    Features

    Platform Features
    Authentication
    Email AI-CRM System
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Web3 Wallet

    API

    Index
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet
    Store API

    CLI

    Ring CLI (enterprise only)

    Customization

    Index
    Branding
    Features
    Localization
    Themes
    Components

    Deployment

    Index
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery

    Development

    Index
    Local Setup
    Code Structure
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise

    Roadmap

    Platform Roadmap (Technical)

    Examples

    Index
    Quick Start
    Authentication
    Email AI-CRM Tutorial
    Api Integration
    Web3 Integration
    White Label
    Real World

    Integrations

    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Library hub
    Welcome — mission & audiences
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Deploy (Docker · k8s)
    Security & compliance reads

    Admin API

    Ring Platform provides a comprehensive administrative API with 12 secure endpoints for system management, user administration, analytics access, and configuration control. All admin endpoints require ADMIN role and implement enterprise-grade security measures.

    🔒 Admin Access Required

    All admin endpoints require ADMIN role authentication and are subject to strict rate limiting and audit logging. Unauthorized access attempts are logged and may trigger security alerts.

    🏗️ System Architecture

    Admin Access Control

    text
    
    Authentication → Role Verification → Permission Check → Action Logging → Response

    Security Features

    • Role-based Access Control: Multi-level permission system
    • Audit Logging: All admin actions are logged with timestamps and user context
    • Rate Limiting: Admin endpoints have stricter rate limits (100 req/hour vs 1000 req/hour for regular users)
    • IP Whitelisting: Optional IP-based access restrictions
    • Two-Factor Authentication: Required for sensitive operations
    • Session Management: Admin sessions have shorter timeouts (1 hour vs 24 hours)

    Data Protection

    • Encryption at Rest: Sensitive admin data encrypted in database
    • Secure Audit Logs: Admin actions logged to tamper-proof storage
    • GDPR Compliance: Admin data handling follows strict privacy regulations
    • Data Retention: Admin logs retained for 7 years for compliance

    📋 API Endpoints Reference

    GET /api/admin/users

    List and search platform users with advanced filtering and pagination.

    Parameters

    ParameterTypeRequiredDescription
    pagenumberNoPage number (default: 1)
    limitnumberNoUsers per page (default: 50, max: 200)
    searchstringNoSearch by name, email, or username
    rolestringNoFilter by role: VISITOR, MEMBER, CONFIDENTIAL, ADMIN
    statusstringNoFilter by status: active, suspended, banned
    verifiedbooleanNoFilter by email verification status
    createdAfterstringNoISO date - users created after this date
    createdBeforestringNoISO date - users created before this date
    lastLoginAfterstringNoISO date - users logged in after this date
    sortBystringNoSort field: createdAt, lastLogin, name, email
    sortOrderstringNoSort order: asc, desc (default: desc)

    Example Request

    Response

    GET /api/admin/users/{id}

    Get detailed information about a specific user.

    Response

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

    Update a user's role and permissions.

    Request Body

    Response

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

    Update a user's account status (suspend, ban, activate).

    Request Body

    Response

    DELETE /api/admin/users/{id}

    Permanently delete a user account (GDPR compliance).

    Parameters

    ParameterTypeRequiredDescription
    anonymizebooleanNoReplace user data with anonymous placeholders (default: true)
    deleteContentbooleanNoDelete all user-generated content (default: false)
    reasonstringYesReason for account deletion

    Request Body

    Response

    GET /api/admin/analytics

    Get comprehensive platform analytics and metrics.

    Parameters

    ParameterTypeRequiredDescription
    periodstringNoTime period: hour, day, week, month, year (default: week)
    startDatestringNoISO date string for custom range
    endDatestringNoISO date string for custom range
    metricsstring[]NoSpecific metrics to include

    Response

    GET /api/admin/analytics/users

    Get detailed user analytics.

    Parameters

    ParameterTypeRequiredDescription
    groupBystringNoGroup results by: day, week, month, role, status
    includeInactivebooleanNoInclude inactive users in results (default: false)

    GET /api/admin/config

    Get current system configuration settings.

    Response

    PUT /api/admin/config

    Update system configuration settings.

    Request Body

    Response

    POST /api/admin/config/rollback

    Rollback configuration changes.

    Request Body

    GET /api/admin/audit

    Get audit logs for admin actions.

    Parameters

    ParameterTypeRequiredDescription
    pagenumberNoPage number (default: 1)
    limitnumberNoLogs per page (default: 50)
    actionstringNoFilter by action type
    userIdstringNoFilter by user who performed action
    targetUserIdstringNoFilter by user who was affected
    startDatestringNoISO date - logs after this date
    endDatestringNoISO date - logs before this date

    Response

    🔧 Implementation Examples

    Admin Dashboard Component

    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('Failed to fetch admin stats:', error)
        } finally {
          setLoading(false)
        }
      }
    
      if (loading) return <div>Loading admin dashboard...</div>
    
      return (
        <div className="admin-dashboard">
          <h1 className="text-2xl font-bold mb-6">Admin Dashboard</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">Total Users</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">Active Today</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">New Today</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">System Health</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>
    
          {/* Additional admin components */}
          <UserManagement />
          <SystemConfiguration />
          <AuditLogs />
        </div>
      )
    }

    User Management Component

    typescript
    
    import { useState } from 'react'
    import { Button } from '@/components/ui/button'
    import { Badge } from '@/components/ui/badge'
    
    interface User {
      id: string
      name: string
      email: string
      role: string
      status: string
      createdAt: string
    }
    
    export function UserManagement() {
      const [users, setUsers] = useState<User[]>([])
      const [loading, setLoading] = useState(false)
    
      const updateUserRole = async (userId: string, newRole: string) => {
        try {
          setLoading(true)
          const response = await fetch(`/api/admin/users/${userId}/role`, {
            method: 'PUT',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
              role: newRole,
              reason: 'Administrative role update',
              notifyUser: true
            })
          })
    
          if (response.ok) {
            // Update local state
            setUsers(users.map(user =>
              user.id === userId ? { ...user, role: newRole } : user
            ))
          }
        } catch (error) {
          console.error('Failed to update user role:', error)
        } finally {
          setLoading(false)
        }
      }
    
      const suspendUser = async (userId: string) => {
        try {
          const response = await fetch(`/api/admin/users/${userId}/status`, {
            method: 'PUT',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
              status: 'suspended',
              reason: 'Administrative action',
              duration: '7 days',
              notifyUser: true
            })
          })
    
          if (response.ok) {
            setUsers(users.map(user =>
              user.id === userId ? { ...user, status: 'suspended' } : user
            ))
          }
        } catch (error) {
          console.error('Failed to suspend user:', error)
        }
      }
    
      return (
        <div className="user-management">
          <h2 className="text-xl font-semibold mb-4">User Management</h2>
    
          <div className="overflow-x-auto">
            <table className="w-full border-collapse">
              <thead>
                <tr className="border-b">
                  <th className="text-left p-2">User</th>
                  <th className="text-left p-2">Role</th>
                  <th className="text-left p-2">Status</th>
                  <th className="text-left p-2">Joined</th>
                  <th className="text-left p-2">Actions</th>
                </tr>
              </thead>
              <tbody>
                {users.map(user => (
                  <tr key={user.id} className="border-b">
                    <td className="p-2">
                      <div>
                        <div className="font-medium">{user.name}</div>
                        <div className="text-sm text-gray-500">{user.email}</div>
                      </div>
                    </td>
                    <td className="p-2">
                      <Badge variant={user.role === 'ADMIN' ? 'destructive' : 'default'}>
                        {user.role}
                      </Badge>
                    </td>
                    <td className="p-2">
                      <Badge variant={
                        user.status === 'active' ? 'default' :
                        user.status === 'suspended' ? 'secondary' : 'destructive'
                      }>
                        {user.status}
                      </Badge>
                    </td>
                    <td className="p-2 text-sm text-gray-500">
                      {new Date(user.createdAt).toLocaleDateString()}
                    </td>
                    <td className="p-2">
                      <div className="flex gap-2">
                        <Button
                          size="sm"
                          variant="outline"
                          onClick={() => updateUserRole(user.id, 'CONFIDENTIAL')}
                          disabled={loading}
                        >
                          Promote
                        </Button>
                        <Button
                          size="sm"
                          variant="outline"
                          onClick={() => suspendUser(user.id)}
                          disabled={loading || user.status === 'suspended'}
                        >
                          Suspend
                        </Button>
                      </div>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      )
    }

    🚨 Error Handling

    Common Admin Error Responses

    🔒 Security Considerations

    Access Control

    • Multi-level Authentication: Admin operations require fresh authentication
    • Session Validation: Admin sessions validated on every request
    • IP Restrictions: Optional IP whitelisting for admin access
    • Time-based Access: Admin operations restricted during certain hours

    Audit & Compliance

    • Complete Audit Trail: Every admin action logged with full context
    • GDPR Compliance: Admin data handling follows privacy regulations
    • Data Retention: Admin logs retained for 7 years
    • Tamper Detection: Cryptographic signatures on audit logs

    Operational Security

    • Principle of Least Privilege: Admins only get required permissions
    • Two-Person Rule: Critical operations require secondary approval
    • Emergency Access: Break-glass procedures for system recovery
    • Security Monitoring: Real-time monitoring of admin activities

    📊 Monitoring & Analytics

    Admin Activity Dashboard

    Performance Metrics

    🎛️ Configuration

    Environment Variables

    Admin Security Audit Logging System Protection Monitoring

    Database Schema


    Ring Platform's Admin API provides enterprise-grade administrative control with comprehensive security, audit trails, and operational monitoring.

    Admin API

    Ring Platform provides a comprehensive administrative API with 12 secure endpoints for system management, user administration, analytics access, and configuration control. All admin endpoints require ADMIN role and implement enterprise-grade security measures.

    🔒 Admin Access Required

    All admin endpoints require ADMIN role authentication and are subject to strict rate limiting and audit logging. Unauthorized access attempts are logged and may trigger security alerts.

    🏗️ System Architecture

    Admin Access Control

    text
    
    Authentication → Role Verification → Permission Check → Action Logging → Response

    Security Features

    • Role-based Access Control: Multi-level permission system
    • Audit Logging: All admin actions are logged with timestamps and user context
    • Rate Limiting: Admin endpoints have stricter rate limits (100 req/hour vs 1000 req/hour for regular users)
    • IP Whitelisting: Optional IP-based access restrictions
    • Two-Factor Authentication: Required for sensitive operations
    • Session Management: Admin sessions have shorter timeouts (1 hour vs 24 hours)

    Data Protection

    • Encryption at Rest: Sensitive admin data encrypted in database
    • Secure Audit Logs: Admin actions logged to tamper-proof storage
    • GDPR Compliance: Admin data handling follows strict privacy regulations
    • Data Retention: Admin logs retained for 7 years for compliance

    📋 API Endpoints Reference

    GET /api/admin/users

    List and search platform users with advanced filtering and pagination.

    Parameters

    ParameterTypeRequiredDescription
    pagenumberNoPage number (default: 1)
    limitnumberNoUsers per page (default: 50, max: 200)
    searchstringNoSearch by name, email, or username
    rolestringNoFilter by role: VISITOR, MEMBER, CONFIDENTIAL, ADMIN
    statusstringNoFilter by status: active, suspended, banned
    verifiedbooleanNoFilter by email verification status
    createdAfterstringNoISO date - users created after this date
    createdBeforestringNoISO date - users created before this date
    lastLoginAfterstringNoISO date - users logged in after this date
    sortBystringNoSort field: createdAt, lastLogin, name, email
    sortOrderstringNoSort order: asc, desc (default: desc)

    Example Request

    Response

    GET /api/admin/users/{id}

    Get detailed information about a specific user.

    Response

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

    Update a user's role and permissions.

    Request Body

    Response

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

    Update a user's account status (suspend, ban, activate).

    Request Body

    Response

    DELETE /api/admin/users/{id}

    Permanently delete a user account (GDPR compliance).

    Parameters

    ParameterTypeRequiredDescription
    anonymizebooleanNoReplace user data with anonymous placeholders (default: true)
    deleteContentbooleanNoDelete all user-generated content (default: false)
    reasonstringYesReason for account deletion

    Request Body

    Response

    GET /api/admin/analytics

    Get comprehensive platform analytics and metrics.

    Parameters

    ParameterTypeRequiredDescription
    periodstringNoTime period: hour, day, week, month, year (default: week)
    startDatestringNoISO date string for custom range
    endDatestringNoISO date string for custom range
    metricsstring[]NoSpecific metrics to include

    Response

    GET /api/admin/analytics/users

    Get detailed user analytics.

    Parameters

    ParameterTypeRequiredDescription
    groupBystringNoGroup results by: day, week, month, role, status
    includeInactivebooleanNoInclude inactive users in results (default: false)

    GET /api/admin/config

    Get current system configuration settings.

    Response

    PUT /api/admin/config

    Update system configuration settings.

    Request Body

    Response

    POST /api/admin/config/rollback

    Rollback configuration changes.

    Request Body

    GET /api/admin/audit

    Get audit logs for admin actions.

    Parameters

    ParameterTypeRequiredDescription
    pagenumberNoPage number (default: 1)
    limitnumberNoLogs per page (default: 50)
    actionstringNoFilter by action type
    userIdstringNoFilter by user who performed action
    targetUserIdstringNoFilter by user who was affected
    startDatestringNoISO date - logs after this date
    endDatestringNoISO date - logs before this date

    Response

    🔧 Implementation Examples

    Admin Dashboard Component

    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('Failed to fetch admin stats:', error)
        } finally {
          setLoading(false)
        }
      }
    
      if (loading) return <div>Loading admin dashboard...</div>
    
      return (
        <div className="admin-dashboard">
          <h1 className="text-2xl font-bold mb-6">Admin Dashboard</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">Total Users</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">Active Today</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">New Today</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">System Health</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>
    
          {/* Additional admin components */}
          <UserManagement />
          <SystemConfiguration />
          <AuditLogs />
        </div>
      )
    }

    User Management Component

    typescript
    
    import { useState } from 'react'
    import { Button } from '@/components/ui/button'
    import { Badge } from '@/components/ui/badge'
    
    interface User {
      id: string
      name: string
      email: string
      role: string
      status: string
      createdAt: string
    }
    
    export function UserManagement() {
      const [users, setUsers] = useState<User[]>([])
      const [loading, setLoading] = useState(false)
    
      const updateUserRole = async (userId: string, newRole: string) => {
        try {
          setLoading(true)
          const response = await fetch(`/api/admin/users/${userId}/role`, {
            method: 'PUT',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
              role: newRole,
              reason: 'Administrative role update',
              notifyUser: true
            })
          })
    
          if (response.ok) {
            // Update local state
            setUsers(users.map(user =>
              user.id === userId ? { ...user, role: newRole } : user
            ))
          }
        } catch (error) {
          console.error('Failed to update user role:', error)
        } finally {
          setLoading(false)
        }
      }
    
      const suspendUser = async (userId: string) => {
        try {
          const response = await fetch(`/api/admin/users/${userId}/status`, {
            method: 'PUT',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
              status: 'suspended',
              reason: 'Administrative action',
              duration: '7 days',
              notifyUser: true
            })
          })
    
          if (response.ok) {
            setUsers(users.map(user =>
              user.id === userId ? { ...user, status: 'suspended' } : user
            ))
          }
        } catch (error) {
          console.error('Failed to suspend user:', error)
        }
      }
    
      return (
        <div className="user-management">
          <h2 className="text-xl font-semibold mb-4">User Management</h2>
    
          <div className="overflow-x-auto">
            <table className="w-full border-collapse">
              <thead>
                <tr className="border-b">
                  <th className="text-left p-2">User</th>
                  <th className="text-left p-2">Role</th>
                  <th className="text-left p-2">Status</th>
                  <th className="text-left p-2">Joined</th>
                  <th className="text-left p-2">Actions</th>
                </tr>
              </thead>
              <tbody>
                {users.map(user => (
                  <tr key={user.id} className="border-b">
                    <td className="p-2">
                      <div>
                        <div className="font-medium">{user.name}</div>
                        <div className="text-sm text-gray-500">{user.email}</div>
                      </div>
                    </td>
                    <td className="p-2">
                      <Badge variant={user.role === 'ADMIN' ? 'destructive' : 'default'}>
                        {user.role}
                      </Badge>
                    </td>
                    <td className="p-2">
                      <Badge variant={
                        user.status === 'active' ? 'default' :
                        user.status === 'suspended' ? 'secondary' : 'destructive'
                      }>
                        {user.status}
                      </Badge>
                    </td>
                    <td className="p-2 text-sm text-gray-500">
                      {new Date(user.createdAt).toLocaleDateString()}
                    </td>
                    <td className="p-2">
                      <div className="flex gap-2">
                        <Button
                          size="sm"
                          variant="outline"
                          onClick={() => updateUserRole(user.id, 'CONFIDENTIAL')}
                          disabled={loading}
                        >
                          Promote
                        </Button>
                        <Button
                          size="sm"
                          variant="outline"
                          onClick={() => suspendUser(user.id)}
                          disabled={loading || user.status === 'suspended'}
                        >
                          Suspend
                        </Button>
                      </div>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      )
    }

    🚨 Error Handling

    Common Admin Error Responses

    🔒 Security Considerations

    Access Control

    • Multi-level Authentication: Admin operations require fresh authentication
    • Session Validation: Admin sessions validated on every request
    • IP Restrictions: Optional IP whitelisting for admin access
    • Time-based Access: Admin operations restricted during certain hours

    Audit & Compliance

    • Complete Audit Trail: Every admin action logged with full context
    • GDPR Compliance: Admin data handling follows privacy regulations
    • Data Retention: Admin logs retained for 7 years
    • Tamper Detection: Cryptographic signatures on audit logs

    Operational Security

    • Principle of Least Privilege: Admins only get required permissions
    • Two-Person Rule: Critical operations require secondary approval
    • Emergency Access: Break-glass procedures for system recovery
    • Security Monitoring: Real-time monitoring of admin activities

    📊 Monitoring & Analytics

    Admin Activity Dashboard

    Performance Metrics

    🎛️ Configuration

    Environment Variables

    Admin Security Audit Logging System Protection Monitoring

    Database Schema


    Ring Platform's Admin API provides enterprise-grade administrative control with comprehensive security, audit trails, and operational monitoring.

    Admin API

    Ring Platform provides a comprehensive administrative API with 12 secure endpoints for system management, user administration, analytics access, and configuration control. All admin endpoints require ADMIN role and implement enterprise-grade security measures.

    🔒 Admin Access Required

    All admin endpoints require ADMIN role authentication and are subject to strict rate limiting and audit logging. Unauthorized access attempts are logged and may trigger security alerts.

    🏗️ System Architecture

    Admin Access Control

    text
    
    Authentication → Role Verification → Permission Check → Action Logging → Response

    Security Features

    • Role-based Access Control: Multi-level permission system
    • Audit Logging: All admin actions are logged with timestamps and user context
    • Rate Limiting: Admin endpoints have stricter rate limits (100 req/hour vs 1000 req/hour for regular users)
    • IP Whitelisting: Optional IP-based access restrictions
    • Two-Factor Authentication: Required for sensitive operations
    • Session Management: Admin sessions have shorter timeouts (1 hour vs 24 hours)

    Data Protection

    • Encryption at Rest: Sensitive admin data encrypted in database
    • Secure Audit Logs: Admin actions logged to tamper-proof storage
    • GDPR Compliance: Admin data handling follows strict privacy regulations
    • Data Retention: Admin logs retained for 7 years for compliance

    📋 API Endpoints Reference

    GET /api/admin/users

    List and search platform users with advanced filtering and pagination.

    Parameters

    ParameterTypeRequiredDescription
    pagenumberNoPage number (default: 1)
    limitnumberNoUsers per page (default: 50, max: 200)
    searchstringNoSearch by name, email, or username
    rolestringNoFilter by role: VISITOR, MEMBER, CONFIDENTIAL, ADMIN
    statusstringNoFilter by status: active, suspended, banned
    verifiedbooleanNoFilter by email verification status
    createdAfterstringNoISO date - users created after this date
    createdBeforestringNoISO date - users created before this date
    lastLoginAfterstringNoISO date - users logged in after this date
    sortBystringNoSort field: createdAt, lastLogin, name, email
    sortOrderstringNoSort order: asc, desc (default: desc)

    Example Request

    Response

    GET /api/admin/users/{id}

    Get detailed information about a specific user.

    Response

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

    Update a user's role and permissions.

    Request Body

    Response

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

    Update a user's account status (suspend, ban, activate).

    Request Body

    Response

    DELETE /api/admin/users/{id}

    Permanently delete a user account (GDPR compliance).

    Parameters

    ParameterTypeRequiredDescription
    anonymizebooleanNoReplace user data with anonymous placeholders (default: true)
    deleteContentbooleanNoDelete all user-generated content (default: false)
    reasonstringYesReason for account deletion

    Request Body

    Response

    GET /api/admin/analytics

    Get comprehensive platform analytics and metrics.

    Parameters

    ParameterTypeRequiredDescription
    periodstringNoTime period: hour, day, week, month, year (default: week)
    startDatestringNoISO date string for custom range
    endDatestringNoISO date string for custom range
    metricsstring[]NoSpecific metrics to include

    Response

    GET /api/admin/analytics/users

    Get detailed user analytics.

    Parameters

    ParameterTypeRequiredDescription
    groupBystringNoGroup results by: day, week, month, role, status
    includeInactivebooleanNoInclude inactive users in results (default: false)

    GET /api/admin/config

    Get current system configuration settings.

    Response

    PUT /api/admin/config

    Update system configuration settings.

    Request Body

    Response

    POST /api/admin/config/rollback

    Rollback configuration changes.

    Request Body

    GET /api/admin/audit

    Get audit logs for admin actions.

    Parameters

    ParameterTypeRequiredDescription
    pagenumberNoPage number (default: 1)
    limitnumberNoLogs per page (default: 50)
    actionstringNoFilter by action type
    userIdstringNoFilter by user who performed action
    targetUserIdstringNoFilter by user who was affected
    startDatestringNoISO date - logs after this date
    endDatestringNoISO date - logs before this date

    Response

    🔧 Implementation Examples

    Admin Dashboard Component

    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('Failed to fetch admin stats:', error)
        } finally {
          setLoading(false)
        }
      }
    
      if (loading) return <div>Loading admin dashboard...</div>
    
      return (
        <div className="admin-dashboard">
          <h1 className="text-2xl font-bold mb-6">Admin Dashboard</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">Total Users</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">Active Today</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">New Today</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">System Health</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>
    
          {/* Additional admin components */}
          <UserManagement />
          <SystemConfiguration />
          <AuditLogs />
        </div>
      )
    }

    User Management Component

    typescript
    
    import { useState } from 'react'
    import { Button } from '@/components/ui/button'
    import { Badge } from '@/components/ui/badge'
    
    interface User {
      id: string
      name: string
      email: string
      role: string
      status: string
      createdAt: string
    }
    
    export function UserManagement() {
      const [users, setUsers] = useState<User[]>([])
      const [loading, setLoading] = useState(false)
    
      const updateUserRole = async (userId: string, newRole: string) => {
        try {
          setLoading(true)
          const response = await fetch(`/api/admin/users/${userId}/role`, {
            method: 'PUT',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
              role: newRole,
              reason: 'Administrative role update',
              notifyUser: true
            })
          })
    
          if (response.ok) {
            // Update local state
            setUsers(users.map(user =>
              user.id === userId ? { ...user, role: newRole } : user
            ))
          }
        } catch (error) {
          console.error('Failed to update user role:', error)
        } finally {
          setLoading(false)
        }
      }
    
      const suspendUser = async (userId: string) => {
        try {
          const response = await fetch(`/api/admin/users/${userId}/status`, {
            method: 'PUT',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
              status: 'suspended',
              reason: 'Administrative action',
              duration: '7 days',
              notifyUser: true
            })
          })
    
          if (response.ok) {
            setUsers(users.map(user =>
              user.id === userId ? { ...user, status: 'suspended' } : user
            ))
          }
        } catch (error) {
          console.error('Failed to suspend user:', error)
        }
      }
    
      return (
        <div className="user-management">
          <h2 className="text-xl font-semibold mb-4">User Management</h2>
    
          <div className="overflow-x-auto">
            <table className="w-full border-collapse">
              <thead>
                <tr className="border-b">
                  <th className="text-left p-2">User</th>
                  <th className="text-left p-2">Role</th>
                  <th className="text-left p-2">Status</th>
                  <th className="text-left p-2">Joined</th>
                  <th className="text-left p-2">Actions</th>
                </tr>
              </thead>
              <tbody>
                {users.map(user => (
                  <tr key={user.id} className="border-b">
                    <td className="p-2">
                      <div>
                        <div className="font-medium">{user.name}</div>
                        <div className="text-sm text-gray-500">{user.email}</div>
                      </div>
                    </td>
                    <td className="p-2">
                      <Badge variant={user.role === 'ADMIN' ? 'destructive' : 'default'}>
                        {user.role}
                      </Badge>
                    </td>
                    <td className="p-2">
                      <Badge variant={
                        user.status === 'active' ? 'default' :
                        user.status === 'suspended' ? 'secondary' : 'destructive'
                      }>
                        {user.status}
                      </Badge>
                    </td>
                    <td className="p-2 text-sm text-gray-500">
                      {new Date(user.createdAt).toLocaleDateString()}
                    </td>
                    <td className="p-2">
                      <div className="flex gap-2">
                        <Button
                          size="sm"
                          variant="outline"
                          onClick={() => updateUserRole(user.id, 'CONFIDENTIAL')}
                          disabled={loading}
                        >
                          Promote
                        </Button>
                        <Button
                          size="sm"
                          variant="outline"
                          onClick={() => suspendUser(user.id)}
                          disabled={loading || user.status === 'suspended'}
                        >
                          Suspend
                        </Button>
                      </div>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      )
    }

    🚨 Error Handling

    Common Admin Error Responses

    🔒 Security Considerations

    Access Control

    • Multi-level Authentication: Admin operations require fresh authentication
    • Session Validation: Admin sessions validated on every request
    • IP Restrictions: Optional IP whitelisting for admin access
    • Time-based Access: Admin operations restricted during certain hours

    Audit & Compliance

    • Complete Audit Trail: Every admin action logged with full context
    • GDPR Compliance: Admin data handling follows privacy regulations
    • Data Retention: Admin logs retained for 7 years
    • Tamper Detection: Cryptographic signatures on audit logs

    Operational Security

    • Principle of Least Privilege: Admins only get required permissions
    • Two-Person Rule: Critical operations require secondary approval
    • Emergency Access: Break-glass procedures for system recovery
    • Security Monitoring: Real-time monitoring of admin activities

    📊 Monitoring & Analytics

    Admin Activity Dashboard

    Performance Metrics

    🎛️ Configuration

    Environment Variables

    Admin Security Audit Logging System Protection Monitoring

    Database Schema


    Ring Platform's Admin API provides enterprise-grade administrative control with comprehensive security, audit trails, and operational monitoring.

    Commissions & Settlements
    Referral Codes (Refcodes)
    Payment Integration
    PaymentConductor
    WayForPay Payment Integration
    News Module - Digital Newspaper Experience
    Member Blogs
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Admin API
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    Api Examples
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    Proxy and internationalization
    Real Time
    Security
    Multi-Vendor Store
    Ring ERP
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    Referral Codes (Refcodes)
    Payment Integration
    PaymentConductor
    WayForPay Payment Integration
    News Module - Digital Newspaper Experience
    Member Blogs
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Admin API
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    Api Examples
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    Proxy and internationalization
    Real Time
    Security
    Multi-Vendor Store
    Ring ERP
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    Referral Codes (Refcodes)
    Payment Integration
    PaymentConductor
    WayForPay Payment Integration
    News Module - Digital Newspaper Experience
    Member Blogs
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Admin API
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    Api Examples
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    Back
    Back
    Back