Skip to main content

Overview

Apollo uses a three-tier permission model that provides granular access control from the organization level down to individual project boards.

Permission Tiers

Tier 1: Organization

Managed in organization_members. Controls organization-wide access.
RolePermissions
OwnerFull control — billing, settings, member management, all features
AdminManage members, teams, and most settings. Cannot delete org or manage billing
MemberAccess features based on team and board roles. Cannot manage org settings
External CollaboratorLimited access to specifically assigned projects only

Tier 2: Team

Managed in team_members. Controls team-scoped resources.
RolePermissions
LeadManage team settings, members, feature config, and project assignments
MemberAccess team projects, tasks, releases, and knowledge base

Tier 3: Board (Project)

Managed in user_project_access.board_role. Controls per-project access.
RolePermissions
OwnerFull project control — settings, members, delete
EditorCreate and modify tasks, releases, and KB pages
ViewerRead-only access to project resources

User Types

Derived from organization role:
User TypeDerived FromSees
InternalOwner, Admin, or Member org roleFull platform based on feature access
CustomerCustomer user typeSimplified dashboard, assigned projects
External CollaboratorExternal Collaborator org roleOnly specifically assigned projects

Route Guards

Apollo enforces permissions at multiple levels:
  • <ProtectedRoute> — requires authentication (any logged-in user)
  • <FeatureRoute feature="..."> — requires the named feature to be enabled for the user
  • <InternalRoute> — requires internal user type
  • <AdminRoute> — requires admin or owner org role

Row-Level Security (RLS)

All database tables have Row-Level Security policies enforced at the PostgreSQL level. Even if the frontend were bypassed, the database enforces access rules based on auth.uid().