Skip to main content

Multi-tenancy Architecture

Vigi implements a multi-tenant architecture where resources (like Monitors, Status Pages, etc.) belong to an Organization. Users can be members of multiple organizations with specific roles.

Core Concepts​

Organization​

The central unit of isolation. All billable resources and operational data are scoped to an Organization.

  • Attributes: Name, CreatedAt, UpdatedAt.
  • ID: UUID.

Organization User​

A link table that associates a User with an Organization.

  • Role:
    • admin: Full access to organization settings and members.
    • member: Can view and manage resources but cannot manage the organization itself (e.g., billing, members).

Resource Isolation​

Resources such as Monitors now have an org_id foreign key. API endpoints filter data based on the organization context.

Data Model​

erDiagram
User ||--|{ OrganizationUser : "belongs to"
Organization ||--|{ OrganizationUser : "has members"
Organization ||--|{ Monitor : "owns"

Organization {
string ID PK
string Name
}

OrganizationUser {
string OrganizationID FK
string UserID FK
string Role "admin, member"
}

Monitor {
string ID PK
string OrgID FK
string Name
string Type
}

API Overview​

The API exposes endpoints to manage organizations and their members.

Organizations​

  • POST /api/v1/organizations: Create a new organization. The creator is automatically added as an admin.
  • GET /api/v1/organizations/{id}: Get organization details.

Members​

  • POST /api/v1/organizations/{id}/members: Add a user to an organization (by user ID).
  • GET /api/v1/organizations/{id}/members: List all members of an organization.

User Context​

  • GET /api/v1/user/organizations: List all organizations the authenticated user belongs to.

Future Improvements​

  • RBAC Enforcement: Currently, the system authenticates users but robust Role-Based Access Control (RBAC) middleware is needed to strictly enforce permissions (e.g., ensuring only admin can add members).
  • Billing Integration: Future billing models will likely be attached to the Organization entity.