RBAC

Role-Based Access Control with 4 roles and 15 granular permissions.

Role-Based Access Control (RBAC)

Metalogue provides enterprise-grade access control with 4 built-in roles and 15 granular permissions.

Overview

graph TB
    T[Tenant] --> R1[Owner]
    T --> R2[Admin]
    T --> R3[Member]
    T --> R4[Viewer]
    
    R1 --> P1[All Permissions]
    R2 --> P2[Most Permissions]
    R3 --> P3[Core Permissions]
    R4 --> P4[Read-Only]

Built-In Roles

RoleDescriptionUse Case
OwnerFull access + tenant settingsFounders, CTO
AdminAll operations except SSO/billingEngineering leads
MemberQuery, capture, connectorsTeam members
ViewerRead-only accessStakeholders, auditors

Permission Matrix

PermissionViewerMemberAdminOwner
query
federate
capture
connector:read
connector:write
forget:self
forget:any
audit:read
audit:export
tenant:read
tenant:write
user:read
user:write
sso:configure
federation:bridge

Permissions Reference

Query & Retrieval

PermissionDescription
queryExecute federated queries
federateCross-node (cross-embedding) queries

Capture & Ingestion

PermissionDescription
captureIngest documents via API
connector:readView connector configurations
connector:writeCreate, update, delete connectors

Unlearning

PermissionDescription
forget:selfCreate tombstones for own content
forget:anyCreate tombstones for any content

Audit

PermissionDescription
audit:readView audit logs
audit:exportExport SOC2 compliance reports

Administration

PermissionDescription
tenant:readView tenant settings
tenant:writeModify tenant settings
user:readView user list
user:writeInvite, update, remove users
sso:configureConfigure SAML/OIDC SSO
federation:bridgeCreate M&A tenant bridges

API Endpoints

List Users

GET /v1/auth/users
Authorization: Bearer mlo_xxx

Response:

{
  "users": [
    {
      "user_id": "uuid",
      "email": "alice@company.com",
      "name": "Alice Smith",
      "role": "admin",
      "is_active": true,
      "last_login": "2026-01-20T01:00:00Z"
    }
  ]
}

Invite User

POST /v1/auth/users/invite
Content-Type: application/json

{
  "email": "bob@company.com",
  "role": "member",
  "name": "Bob Jones"
}

Update User Role

PATCH /v1/auth/users/{user_id}
Content-Type: application/json

{
  "role": "admin"
}

Remove User

DELETE /v1/auth/users/{user_id}

Get Current User

GET /v1/auth/me

SDK Usage

TypeScript

const client = new MetalogueClient({ apiKey: API_KEY });

// List users
const users = await client.listUsers();

// Invite user
await client.inviteUser('bob@company.com', 'member');

Python

client = MetalogueClient(api_key=API_KEY)

# List users
users = await client.list_users()

# Invite user
await client.invite_user("bob@company.com", role="member")

Custom Roles

For enterprise customers, custom roles enable fine-grained permission sets:

POST /v1/auth/roles
Content-Type: application/json

{
  "name": "Data Steward",
  "permissions": [
    "query",
    "audit:read",
    "forget:any"
  ],
  "description": "Manages data quality and compliance"
}

Multi-Tenancy

Each tenant is isolated with its own:

  • User pool
  • Role assignments
  • Permission boundaries
  • Audit logs

Cross-tenant access requires explicit M&A federation bridges.

Best Practices

  1. Use least privilege - Assign minimum necessary permissions
  2. Regular audits - Review user roles quarterly
  3. SSO integration - Map IdP groups to Metalogue roles
  4. Service accounts - Use dedicated accounts for automation
  5. Monitor usage - Track permission usage in audit logs

Next Steps