# Console admin RBAC Purpose - Provide a unified Authority-backed admin surface for tenants, users, roles, clients, tokens, and audit. - Keep browser admin flows DPoP-based while reserving mTLS-only endpoints for automation. - Normalize scope and role bundles so UI, CLI, and APIs align across modules. Admin API tiers - /admin: mTLS + authority.admin for automation and ops tooling. - /console/admin: DPoP + ui.admin and authority scopes for browser and CLI admin flows. - Both tiers share the same data model and audit stream. Authority-owned entities - Tenant: display name, status, isolation mode, default roles. - Installation: tenant binding and bootstrap metadata. - Role: scopes, audiences, flags (interactive-only, fresh-auth required). - User: subject, status, tenant assignments, role bindings. - Client: grant types, auth method, scopes, audiences, tenant hint. - Token record: access and refresh metadata with revocation state. - Audit events: immutable admin and auth events. Fresh-auth window - Required for tenant suspend/resume, token revocation, role edits, client rotation, branding apply. - Authority enforces auth_time within a short TTL (five minutes default). Admin scopes (core) - authority:tenants.read|write - authority:users.read|write - authority:roles.read|write - authority:clients.read|write - authority:tokens.read|revoke - authority:audit.read - authority:branding.read|write - ui.admin Module role bundle pattern - Roles follow role/-viewer, role/-operator, role/-admin. - Viewer maps to read scopes, operator adds run or mutate, admin adds write and admin. - Scanner scopes are scanner:read, scanner:scan, scanner:export, scanner:write. - Scheduler scopes are scheduler:read, scheduler:operate, scheduler:admin. - Policy roles separate author, reviewer, approver, operator, and auditor scopes. - Notify, Export Center, Graph, Signals, Attestor, Signer, SBOM, Release, Airgap, and Task Packs follow the same read/run/admin naming pattern with module-specific scopes. Console admin endpoints (subset) - GET/POST /console/admin/tenants - PATCH /console/admin/tenants/{tenantId} - POST /console/admin/tenants/{tenantId}/suspend|resume - GET/POST /console/admin/users and PATCH /console/admin/users/{userId} - GET/POST /console/admin/roles and PATCH /console/admin/roles/{roleId} - GET/POST /console/admin/clients and POST /console/admin/clients/{clientId}/rotate - POST /console/admin/tokens/revoke - GET /console/admin/audit Offline-first administration - Admin changes can be exported as signed bundles for air-gapped import. - Console surfaces pending status when Authority is offline. - Authority applies bundles through /admin/bundles/apply (mTLS). Related references - docs/architecture/console-admin-rbac.md - docs/security/scopes-and-roles.md - docs/security/authority-scopes.md