Skip to main content

RBAC Permission Matrix

This document defines the Role-Based Access Control (RBAC) system used in Aragora for fine-grained authorization.

Overview

Aragora uses a hierarchical RBAC system with:

  • 8 System Roles with predefined permissions
  • 100+ Permissions covering all resource types
  • Role Hierarchy for permission inheritance
  • Custom Roles for organization-specific needs

System Roles

RolePriorityDescriptionUse Case
Owner100Full control over organizationOrganization founders
Admin80Manage users and resources (no billing)IT administrators
Compliance Officer75Data governance and auditSecurity/compliance teams
Team Lead55Manage team membershipEngineering managers
Debate Creator50Create and run debatesPower users
Member40Standard organization accessRegular employees
Analyst30Read-only analytics accessData analysts
Viewer10Minimal read accessExternal stakeholders

Role Hierarchy

Owner
└── Admin
├── Compliance Officer
│ └── Analyst
│ └── Viewer
└── Debate Creator
└── Team Lead
└── Member
└── Viewer

Roles inherit all permissions from their descendants in the hierarchy.

Permission Categories

Core Permissions

Debates (debate.*)

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
debate.create---
debate.read
debate.update----
debate.delete------
debate.run---
debate.stop---
debate.fork---

Agents (agent.*)

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
agent.create------
agent.read
agent.update------
agent.delete------
agent.deploy------

Users (user.*)

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
user.read-
user.invite------
user.remove------
user.change_role------
user.impersonate-------

Organization (organization.*)

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
organization.read
organization.update------
organization.manage_billing-------
organization.view_audit-----
organization.export_data------

Enterprise Permissions

Gauntlet (Adversarial Testing)

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
gauntlet.run---
gauntlet.read-
gauntlet.delete------
gauntlet.sign------
gauntlet.compare----
gauntlet.export_data----

Compliance & Data Governance

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
data_classification.read------
data_classification.classify------
data_retention.read------
data_retention.update------
pii.read------
pii.redact------
audit_log.read------
audit_log.export------

Control Plane

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
control_plane.read-----
control_plane.submit------
control_plane.cancel------
control_plane.deliberate------

Computer Use (computer_use.*)

PermissionOwnerAdminComplianceTeam LeadCreatorMemberAnalystViewer
computer_use.read------
computer_use.execute------
computer_use.browser------
computer_use.shell------
computer_use.file_read------
computer_use.file_write------
computer_use.screenshot------
computer_use.network------
computer_use.admin------

Handler Permission Mapping

Admin Handlers (/api/v1/admin/*)

EndpointMethodPermissionNotes
/admin/organizationsGETadmin.organizations.listList all orgs
/admin/usersGETadmin.users.listList all users
/admin/statsGETadmin.stats.readSystem statistics
/admin/metricsGETadmin.metrics.readSystem metrics
/admin/revenueGETadmin.revenue.readRevenue stats
/admin/users/\{id\}/impersonatePOSTadmin.users.impersonateUser impersonation
/admin/users/\{id\}/deactivatePOSTadmin.users.deactivateDeactivate user
/admin/users/\{id\}/activatePOSTadmin.users.activateActivate user
/admin/users/\{id\}/unlockPOSTadmin.users.unlockUnlock account
/admin/nomic/statusGETadmin.nomic.readNomic loop status
/admin/nomic/circuit-breakersGETadmin.nomic.readCircuit breakers
/admin/nomic/resetPOSTadmin.nomic.writeReset nomic phase
/admin/nomic/pausePOSTadmin.nomic.writePause nomic
/admin/nomic/resumePOSTadmin.nomic.writeResume nomic

Security Handlers (/api/v1/admin/security/*)

EndpointMethodPermissionNotes
/admin/security/statusGETadmin.security.statusEncryption status
/admin/security/healthGETadmin.security.healthSecurity health
/admin/security/keysGETadmin.security.keysList keys
/admin/security/rotate-keyPOSTadmin.security.rotateRotate key

Billing Handlers (/api/v1/billing/*)

EndpointMethodPermissionNotes
/billing/usageGETorg:billingUsage stats
/billing/subscriptionGETorg:billingSubscription details
/billing/checkoutPOSTorg:billingCreate checkout
/billing/portalPOSTorg:billingBilling portal
/billing/cancelPOSTorg:billingCancel subscription
/billing/resumePOSTorg:billingResume subscription
/billing/audit-logGETadmin:auditBilling audit log
/billing/usage/exportGETorg:billingExport usage
/billing/usage/forecastGETorg:billingUsage forecast
/billing/invoicesGETorg:billingInvoice history

Custom Role Creation

Organizations can create custom roles based on system roles:

from aragora.rbac.defaults import create_custom_role

engineering_role = create_custom_role(
name="engineering",
display_name="Engineering Team",
description="Engineering with agent management",
permission_keys={
"agent.create",
"agent.update",
"connector.create",
},
org_id="org-123",
base_role="debate_creator", # Inherit permissions
)

Role Templates

TemplateBase RoleAdditional Permissions
engineeringdebate_creatoragent.create, agent.update, connector.create
researchanalysttraining.create, debate.create, debate.run
supportvieweruser.read, organization.view_audit
externalviewer(none)

Permission Enforcement

Decorator Usage

from aragora.rbac.decorators import require_permission

@require_permission("debate.create")
async def create_debate(context: AuthorizationContext, ...):
...

@require_permission("user.impersonate", resource_id_param="user_id")
async def impersonate_user(context: AuthorizationContext, user_id: str, ...):
...

Manual Check

from aragora.rbac import check_permission, AuthorizationContext

context = AuthorizationContext(
user_id="user-123",
roles={"admin"},
org_id="org-456",
)

decision = check_permission(context, "debate.delete", resource_id="debate-789")
if decision.allowed:
# Proceed with deletion
...

Audit Logging

All RBAC decisions are logged for compliance:

{
"timestamp": "2026-01-25T12:00:00Z",
"user_id": "user-123",
"permission": "debate.delete",
"resource_id": "debate-789",
"allowed": true,
"reason": "Permission granted via admin role",
"ip_address": "192.168.1.1"
}

Best Practices

  1. Principle of Least Privilege: Assign the minimum role needed
  2. Role Inheritance: Use hierarchy instead of duplicating permissions
  3. Custom Roles: Create org-specific roles for unique needs
  4. Audit Regularly: Review role assignments quarterly
  5. MFA Enforcement: Require MFA for admin/owner roles