Skip to main content

RBAC Permissions Matrix

This document defines the Role-Based Access Control (RBAC) permission model for Traceo.

Roles

Traceo uses a hierarchical role model where higher roles inherit all permissions from lower roles.
RoleLevelDescription
Viewer0Read-only access to workspace resources
Editor1Create and update requirements and relationships
Admin2Delete resources, view audit logs, manage workspace settings
Owner3Full access including user management and billing

Permission Categories

Requirements

PermissionDescriptionViewerEditorAdminOwner
requirements:readView requirements and their details:white_check_mark::white_check_mark::white_check_mark::white_check_mark:
requirements:createCreate new requirements:x::white_check_mark::white_check_mark::white_check_mark:
requirements:updateModify existing requirements:x::white_check_mark::white_check_mark::white_check_mark:
requirements:deleteDelete requirements:x::x::white_check_mark::white_check_mark:
requirements:exportExport requirements to files:white_check_mark::white_check_mark::white_check_mark::white_check_mark:

Relationships

PermissionDescriptionViewerEditorAdminOwner
relationships:readView traceability relationships:white_check_mark::white_check_mark::white_check_mark::white_check_mark:
relationships:createCreate new relationships:x::white_check_mark::white_check_mark::white_check_mark:
relationships:updateModify existing relationships:x::white_check_mark::white_check_mark::white_check_mark:
relationships:deleteDelete relationships:x::x::white_check_mark::white_check_mark:

Jobs (Ingestion)

PermissionDescriptionViewerEditorAdminOwner
jobs:readView job status and history:white_check_mark::white_check_mark::white_check_mark::white_check_mark:
jobs:createSubmit new ingestion jobs:x::white_check_mark::white_check_mark::white_check_mark:
jobs:cancelCancel running jobs:x::white_check_mark::white_check_mark::white_check_mark:
jobs:retryRetry failed jobs:x::white_check_mark::white_check_mark::white_check_mark:

Audit Logs

PermissionDescriptionViewerEditorAdminOwner
audit:readView audit log entries:x::x::white_check_mark::white_check_mark:
audit:exportExport audit logs:x::x::white_check_mark::white_check_mark:

Workspace Management

PermissionDescriptionViewerEditorAdminOwner
workspace:readView workspace settings:white_check_mark::white_check_mark::white_check_mark::white_check_mark:
workspace:updateModify workspace settings:x::x::white_check_mark::white_check_mark:
workspace:deleteDelete workspace:x::x::x::white_check_mark:

User Management

PermissionDescriptionViewerEditorAdminOwner
users:readView workspace members:white_check_mark::white_check_mark::white_check_mark::white_check_mark:
users:inviteInvite new members:x::x::white_check_mark::white_check_mark:
users:updateChange member roles:x::x::x::white_check_mark:
users:removeRemove members:x::x::x::white_check_mark:

Integrations

PermissionDescriptionViewerEditorAdminOwner
integrations:readView configured integrations:white_check_mark::white_check_mark::white_check_mark::white_check_mark:
integrations:manageAdd/modify/remove integrations:x::x::white_check_mark::white_check_mark:

Permission Inheritance

Permissions are inherited based on role hierarchy:
Owner (Level 3)
  └── Admin (Level 2)
        └── Editor (Level 1)
              └── Viewer (Level 0)
When checking permissions:
  1. Check if user’s role level >= minimum required role level
  2. If using granular permissions, check if permission is in role’s permission set

Implementation

Python Decorator

from traceo_mcp_server.auth.rbac import require_permission

@require_permission("requirements:delete")
async def delete_requirement(requirement_id: str) -> str:
    # Only admins and owners can execute this
    ...

FastAPI Dependency

from traceo_mcp_server.auth.rbac import Permission

@router.delete("/requirements/{id}")
async def delete_requirement(
    id: str,
    _: None = Depends(Permission("requirements:delete"))
):
    ...

Audit Events

All permission checks are logged with:
  • User ID
  • Permission checked
  • Resource type and ID
  • Result (allowed/denied)
  • Timestamp

Role Assignment

  • New users are assigned Viewer role by default
  • Workspace creators are automatically assigned Owner role
  • Only Owners can promote users to Admin
  • Admins can promote Viewers to Editors

Security Considerations

  1. Principle of Least Privilege: Start with Viewer role, grant higher permissions as needed
  2. Permission Caching: Permissions are cached per request, not globally
  3. Audit Trail: All role changes are logged in audit log
  4. No Horizontal Privilege Escalation: Users cannot access other workspaces’ resources
  5. Token Validation: Role is validated from JWT on every request