Super Admin Access
Super Administrator access requirements (Auth service)¶
This document lists places in the Auth service where Super Administrator privileges are required or treated as a privileged bypass.
What “system admin” means in code¶
- Boolean used everywhere:
UserInfoAuthorization.isSystemAdmin - Where it comes from: request middleware binds
UserInfoBindings.USER_AUTHORIZATIONand setsisSystemAdminviaTenantAuthorizationService.isSystemAdmin({ userId }). - Source:
packages/auth/src/providers/auth-middleware.provider.ts(bindAuthorizationContext)
Legacy Code References¶
The Auth service codebase uses these identifiers (unchanged for backward compatibility):
- Role constant:
ROLE_AUTH_SYSTEM_ADMIN(refers to Super Administrator role) - Authorization check:
UserInfoAuthorization.isSystemAdmin(checks Super Administrator status) - Group name:
systemAdmins(group containing Super Administrators) - Service method:
TenantAuthorizationService.isSystemAdmin()(verifies Super Administrator)
These identifiers remain in code for backward compatibility but refer to Super Administrators. Throughout this document, "system admin" refers to what is now called "Super Administrator" in user-facing documentation to avoid confusion with infrastructure system administrators.
Legend¶
- SUA-only: request is rejected unless
isSystemAdmin === true(Super Administrator). - SUA-or-scope: Super Administrator is allowed, but non-super-admins can proceed with a specific elevated scope.
- SUA-or-tenant-admin: Super Administrator is allowed, but tenant admins can also proceed.
- Conditional-SUA-only: becomes SUA-only only under a config/feature-flag condition.
- SUA-bypass: Super Administrators are exempt from a limit/constraint that applies to non-super-admins.
Table of contents¶
- Tenants
- Users & groups
- Apps / clients
- Identity providers
- Roles & permissions (privileged RBAC entities)
- Access requests
- Secrets
- Templates (system templates)
- Platform / system APIs
Tenants¶
- Create tenant:
POST /auth/admin/tenants - Conditional-SA-only when
auth.defaults.restrictTenantCreation === true -
Enforcement:
packages/auth/src/controllers/tenant.controller.mts -
Create tenant with shared identity providers:
POST /auth/admin/tenants/createWithProviders - Conditional-SA-only when
auth.defaults.restrictTenantCreation === true -
Enforcement:
packages/auth/src/controllers/tenant.controller.mts -
Export tenant data:
GET /auth/admin/tenants/{tenantId}/exportGET /auth/admin/tenants/{tenantId}/export/stream- SA-or-tenant-admin (requires “admin” as determined by
TenantAuthorizationService.isAdmin, which treats system admins as privileged) -
Enforcement:
packages/auth/src/controllers/tenant.controller.mts -
Update a tenant certificate name
- SA-or-tenant-admin
-
Enforcement:
packages/auth/src/controllers/tenant-certificates.controller.ts -
Create tenant beyond license
maxTenants - SA-bypass (system admins bypass the max-tenant limit)
- Enforcement:
packages/auth/src/services/tenant-life-cycle.service.ts
Users & groups¶
- Modify a tenant user’s
licenseId:PATCH /auth/admin/tenants/{tenantId}/users/{id} - SA-only
-
Enforcement:
packages/auth/src/controllers/user.controller.ts -
Add users to the system-admin group
PUT /auth/admin/tenants/{tenantId}/groups/{groupId}/users/rel/{userId}PUT /auth/admin/tenants/{tenantId}/groups/{groupId}/users/assign/bulk- SA-only when the target group is
auth.defaults.systemAdminGroup -
Enforcement:
packages/auth/src/controllers/tenant-group.controller.ts -
Remove config-defined system admins from the system-admin group
DELETE /auth/admin/tenants/{tenantId}/groups/{groupId}/users/rel/{userId}- Not allowed for users listed in
auth.system.administrators(even by system admins) -
Enforcement:
packages/auth/src/controllers/tenant-group.controller.ts -
Create/update/delete privileged groups (groups marked
isPrivileged, including names under theadmin::namespace) - SA-or-scope (
ADMIN_SCOPE.ADMIN_PERMISSIONS_UPDATE) -
Enforcement:
packages/auth/src/controllers/tenant-group.controller.ts -
Invite users to a privileged group via data-change requests
POST /auth/admin/tenants/{tenantId}/data-change-request(whengroupIdpoints at a privileged group)- SA-or-scope (
ADMIN_SCOPE.ADMIN_PERMISSIONS_UPDATE) -
Enforcement:
packages/auth/src/components/data-change-requests/controllers/data-change-request.controller.mts -
Tenant user expiration job excludes system admins
- SA-bypass (system admins are not expired by this job)
- Enforcement:
packages/auth/src/components/bullmq-job/jobs/tenant-user-profile-expiration.mts
Apps / clients¶
- Create clients beyond license
maxClients - SA-bypass (system admins bypass the max-client limit)
-
Enforcement:
packages/auth/src/controllers/tenant-client.controller.ts -
Update SAML access scripts (claims mapping script, claims authorization script, user-info customization script)
- SA-or-scope (non-system-admins must have the relevant elevated scopes, e.g.
ADMIN_SCOPE.UPDATE_ACCESS_SCRIPTSand/orADMIN_SCOPE.UPDATE_CLIENTS) - Enforcement:
packages/auth/src/controllers/tenant-client.controller.ts
Identity providers¶
- Set or change
aal_override - Applies to:
POST /auth/admin/tenants/{tenantId}/identity-providersPATCH /auth/admin/tenants/{tenantId}/identity-providers/{id}PUT /auth/admin/tenants/{tenantId}/identity-providers/{id}
- SA-only
-
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Create a trusted identity provider (
isTrusted: true) POST /auth/admin/tenants/{tenantId}/identity-providers- SA-or-scope (
ADMIN_SCOPE.TRUSTED_PROVIDER_EDIT) -
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Change verification status (
isTrusted) on an existing identity provider PATCH/PUT /auth/admin/tenants/{tenantId}/identity-providers/{id}(whenisTrustedchanges)- SA-or-scope (
ADMIN_SCOPE.TRUSTED_PROVIDER_EDIT) -
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Edit a verified/trusted identity provider
PATCH/PUT /auth/admin/tenants/{tenantId}/identity-providers/{id}when the existing provider is already trusted- SA-or-scope (
ADMIN_SCOPE.TRUSTED_PROVIDER_EDIT) -
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Set or change IdP
mfaType - Applies to create and update/replace endpoints.
- SA-or-scope (
ADMIN_SCOPE.TRUSTED_PROVIDER_EDIT), with additional tenant-admin logic depending on whether the IdP is trusted. -
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Set identity provider claims mapping script (
config.scripts.mapUserProfile) - SA-or-scope (
ADMIN_SCOPE.IDENTITY_PROVIDER_CLAIMS_SCRIPTING) in the non-system-admin path -
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Configure secondary unique attributes (
config.secondaryUniqueAttributes) - SA-or-scope (
ADMIN_SCOPE.TRUSTED_PROVIDER_EDITis treated as a privileged bypass; otherwise blocked) -
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Manage “generic OAuth2” identity providers (type
OAUTH2) - SA-or-scope (
ADMIN_SCOPE.TRUSTED_PROVIDER_EDITis treated as a privileged bypass; otherwiseADMIN_SCOPE.IDENTITY_PROVIDER_CLAIMS_SCRIPTINGis required) -
Enforcement:
packages/auth/src/controllers/tenant-identity-provider.controller.mts -
Identity provider secret fields in API responses (unmasked)
- SA-or-scope (
ADMIN_SCOPE.IDENTITY_PROVIDER_SECRETS_LIST) - Enforcement:
packages/auth/src/repositories/identity-provider.repository.mts(repository masks secrets unless privileged)
Roles & permissions (privileged RBAC entities)¶
- Create/update/delete privileged roles
- Enforcement:
packages/auth/src/controllers/roles/tenant-client-role.controller.tspackages/auth/src/controllers/roles/tenant-access-role.controller.ts
- SA-or-scope (
ADMIN_SCOPE.ADMIN_PERMISSIONS_UPDATE) -
Extra restriction: default tenant-admin role (
DEFAULT_ROLE.TENANT_ADMIN) has additional protections against rename/removal. -
Create/update/delete privileged permissions
- Enforcement:
packages/auth/src/controllers/tenant-permission.controller.tspackages/auth/src/controllers/tenant-resource-server-permission.controller.ts
- SA-or-scope (
ADMIN_SCOPE.ADMIN_PERMISSIONS_UPDATE)
Access requests¶
- Approve an access request even if not in the approval chain (system admin override)
- SA-bypass (system admins can approve even if not otherwise an authorized approver)
-
Enforcement:
packages/auth/src/components/access-requests/services/request-approval.service.mts -
Update a TOTP Reset request template
PUT /auth/admin/tenants/{tenantId}/requestable-accesses/{id}(whenaccessType === TOTP_RESET)- SA-or-tenant-admin
-
Enforcement:
packages/auth/src/components/access-requests/controllers/requestable-access.controller.mts -
Delete the default-tenant TOTP Reset request template
DELETE /auth/admin/tenants/{tenantId}/requestable-accesses/{id}- Conditional-SA-only when deleting a
TOTP_RESETtemplate in the default tenant - Enforcement:
packages/auth/src/components/access-requests/controllers/requestable-access.controller.mts
Secrets¶
- Read plaintext for a system-shared tenant secret
GET /auth/admin/tenants/{tenantId}/secrets/{secretId}(when the secret is shared atSharedLevel.System)- SA-only
- Enforcement:
packages/auth/src/components/secret-manager/controllers/tenant-secret-manager.controller.mts -
Note: secrets marked
SecretWriteOnlycannot be read. -
Backfill users’ TOTP secrets to JWE
POST /auth/admin/secrets/backfill-totp-secrets-jwe- SA-only
- Enforcement:
packages/auth/src/components/secret-manager/controllers/user-totp-secret.controller.mts
Templates (system templates)¶
- Revert an HTML template to system default
POST /html-templates/{id}/revert-to-system-default- SA-only
-
Enforcement:
packages/auth/src/controllers/html-template-history.controller.ts -
Create or update a system HTML template (when
isSystemTemplate === true) POST /auth/admin/tenants/{tenantId}/html-templatePUT /auth/admin/tenants/{tenantId}/html-template/{id}- SA-or-scope (
ADMIN_SCOPE.UPDATE_SYSTEM_TEMPLATES) -
Enforcement:
packages/auth/src/components/html-template/html-template.controller.mts -
Create or update a system email template (when
isSystemTemplate === true) POST /auth/admin/tenants/{tenantId}/email-templatePUT /auth/admin/tenants/{tenantId}/email-template/{id}- SA-or-scope (
ADMIN_SCOPE.UPDATE_SYSTEM_TEMPLATES) - Enforcement:
packages/auth/src/components/email-template/email-template.controller.mts
Platform / system APIs¶
Licensing¶
- Create a license:
POST /auth/admin/licenses - SA-only
-
Enforcement:
packages/auth/src/controllers/license.controller.ts -
Update a license:
PATCH /auth/admin/licenses/{licenseId} - SA-only
-
Enforcement:
packages/auth/src/controllers/license.controller.ts -
Delete a license:
DELETE /auth/admin/licenses/{licenseId} - SA-only
-
Enforcement:
packages/auth/src/controllers/license.controller.ts -
Assign a license to a user:
PUT /auth/admin/licenses/{licenseId}/rel/{userId} - SA-only
- Enforcement:
packages/auth/src/controllers/license.controller.ts
Issuers¶
- Create/update/delete issuer
POST /auth/admin/issuersPATCH /auth/admin/issuersPATCH /auth/admin/issuers/{id}PUT /auth/admin/issuers/{id}DELETE /auth/admin/issuers/{id}- SA-only
- Enforcement:
packages/auth/src/controllers/issuer.controller.ts
Allowed origins (global CORS allow-list)¶
- List global allowed origins:
GET /auth/admin/allowed-origins/global - Refresh allowed-origins cache:
POST /auth/admin/allowed-origins/refresh-cache - Get allow-list enabled state:
GET /auth/admin/allowed-origins/allowlist-enabled - Set allow-list enabled state:
PATCH /auth/admin/allowed-origins/allowlist-enabled - Get discovery mode state:
GET /auth/admin/allowed-origins/discovery-mode - Set discovery mode state:
PATCH /auth/admin/allowed-origins/discovery-mode - SA-only
-
Enforcement:
packages/auth/src/controllers/allowed-origin.controller.ts -
Create a global allowed origin:
POST /auth/admin/tenants/{tenantId}/allowed-originswith body{ isGlobal: true } - SA-only
-
Enforcement:
packages/auth/src/controllers/allowed-origin.controller.ts -
List global origins via tenant endpoint:
GET /auth/admin/tenants/{tenantId}/allowed-originswithfilter.where.isGlobal === true - SA-only
-
Enforcement:
packages/auth/src/controllers/allowed-origin.controller.ts -
Toggle global status on an origin:
PATCH /auth/admin/tenants/{tenantId}/allowed-origins/{id}when request body includesisGlobal - SA-only
- Enforcement:
packages/auth/src/controllers/allowed-origin.controller.ts
System notifications¶
- Set a notification as global:
POST /auth/admin/tenants/{tenantId}/system-notificationwithisGlobal: true - SA-only
-
Enforcement:
packages/auth/src/controllers/system-notification.controller.ts -
Change global notification settings:
PATCH /auth/admin/tenants/{tenantId}/system-notification/{id}when request changesisGlobal - SA-only
- Enforcement:
packages/auth/src/controllers/system-notification.controller.ts
Audit¶
- Restore audit logs:
POST /auth/admin/tenants/{tenantId}/audit/restore - SA-only
-
Enforcement:
packages/auth/src/controllers/audit.controller.ts -
Audit chain verification / last hash
GET /audit-chain/verifyGET /audit-chain/verify-checkpointsGET /audit-chain/verify-last-weekGET /audit-chain/verify-last-monthGET /audit-chain/last-hash- SA-or-client-credentials (allowed if system admin OR client-credentials grant)
- Enforcement:
packages/auth/src/controllers/audit-log-chain.controller.ts
Jobs¶
- Create/update/delete a job
POST /auth/admin/tenants/{tenantId}/jobPUT /auth/admin/tenants/{tenantId}/job/{id}DELETE /auth/admin/tenants/{tenantId}/job/{id}- SA-only
- Enforcement:
packages/auth/src/components/job/controllers/job.controller.mts
SSH manager¶
- Create or update SSH access requests (user SSH keys)
POST /auth/tenants/{tenantId}/user/ssh/ssh-requestPUT /auth/tenants/{tenantId}/user/ssh/ssh-request- SA-or-scope (
ADMIN_SCOPE.USER_SSH_SECRET) - Enforcement:
packages/auth/src/components/ssh-manager/controllers/ssh-manager.controller.mts
Uploads¶
- Upload files while uploads are disabled
- Conditional-SA-only when
auth.uploads.enabled === falseandauth.uploads.systemAdminsOnly === true - Enforcement:
packages/auth/src/services/upload-authorization.service.ts
Landing pages¶
- Edit landing pages (wherever
LandingPageAuthorizationService.checkEditAuthorization(...)is used) - Conditional-SA-only when
auth.landingPage.systemAdminsEnabled === trueandauth.landingPage.tenantAdminsEnabled === false - Enforcement:
packages/auth/src/services/landing-page-authorization.service.ts