Back to Bytebase

API Resource Name & Parent Patterns

docs/plans/saas/07.api-resource-patterns.md

3.17.19.7 KB
Original Source

API Resource Name & Parent Patterns

This document catalogs every RPC method and its resource name/parent pattern, showing how the ACL layer can determine workspace ownership for each API call.


Pattern Categories

CategoryACL ValidationExample
Workspace-level (no parent)Workspace from JWT contextListProjects, ListInstances
projects/{project} parentACL validates project belongs to workspaceListIssues, CreatePlan
instances/{instance} parentACL validates instance belongs to workspaceListInstanceRoles
instances/{instance}/databases/{database} parentACL looks up database with workspace filter, resolves to projectListChangelogs, Query
Multi-level (workspace/project/env/instance/database)ACL matches the specific parent typeOrgPolicyService
Global (no workspace scope)Skipped (allow_without_credential)Login, Signup

Workspace-Level (No Parent)

These APIs list/create top-level resources. The workspace is resolved from the JWT context only.

ServiceMethodNotes
ActuatorServiceGetActuatorInfo, SetupSample, DeleteCache, GetResourcePackageSystem operations
AuthServiceLogin, Logout, Signup, Refresh, ExchangeTokenallow_without_credential
CelServiceBatchParse, BatchDeparseUtility
GroupServiceListGroups, CreateGroup
IdentityProviderServiceListIdentityProviders, CreateIdentityProvider
InstanceServiceListInstances, CreateInstance, BatchSyncInstances, BatchUpdateInstances
ProjectServiceListProjects, SearchProjects, CreateProject, BatchDeleteProjects
ReviewConfigServiceListReviewConfigs, CreateReviewConfig
RoleServiceListRoles, CreateRole
SettingServiceListSettings
SubscriptionServiceGetSubscription, UpdateSubscription
UserServiceListUsers, CreateUser, GetCurrentUser

Name-Based (Top-Level Resource by Name)

These APIs operate on a single top-level resource by its name. ACL validates via workspace context.

ServiceMethodName Pattern
GroupServiceGetGroup, UpdateGroup, DeleteGroupgroups/{group}
GroupServiceBatchGetGroupsgroups/{group} (repeated)
IdentityProviderServiceGetIdentityProvider, UpdateIdentityProvider, DeleteIdentityProvider, TestIdentityProvideridps/{idp}
InstanceServiceGetInstance, UpdateInstance, DeleteInstance, UndeleteInstance, SyncInstance, ListInstanceDatabase, AddDataSource, RemoveDataSource, UpdateDataSourceinstances/{instance}
ProjectServiceGetProject, UpdateProject, DeleteProject, UndeleteProjectprojects/{project}
ProjectServiceBatchGetProjectsprojects/{project} (repeated)
ReviewConfigServiceGetReviewConfig, UpdateReviewConfig, DeleteReviewConfigreviewConfigs/{reviewConfig}
RoleServiceGetRole, UpdateRole, DeleteRoleroles/{role}
SettingServiceGetSetting, UpdateSettingsettings/{setting}
UserServiceGetUser, UpdateUser, DeleteUser, UndeleteUser, UpdateEmailusers/{user}
UserServiceBatchGetUsersusers/{user} (repeated)
ServiceAccountServiceGetServiceAccount, UpdateServiceAccount, DeleteServiceAccount, UndeleteServiceAccountserviceAccounts/{email}
WorkloadIdentityServiceGetWorkloadIdentity, UpdateWorkloadIdentity, DeleteWorkloadIdentity, UndeleteWorkloadIdentityworkloadIdentities/{email}

projects/{project} Parent

These APIs are scoped to a project. ACL validates the project belongs to the workspace.

ServiceMethodResource Pattern
AccessGrantServiceListAccessGrants, CreateAccessGrant, SearchMyAccessGrantsparent: projects/{project}
AccessGrantServiceGetAccessGrant, ActivateAccessGrant, RevokeAccessGrantname: projects/{project}/accessGrants/{accessGrant}
DatabaseGroupServiceListDatabaseGroups, CreateDatabaseGroupparent: projects/{project}
DatabaseGroupServiceGetDatabaseGroup, UpdateDatabaseGroup, DeleteDatabaseGroupname: projects/{project}/databaseGroups/{databaseGroup}
IssueServiceListIssues, SearchIssues, CreateIssue, BatchUpdateIssuesStatusparent: projects/{project}
IssueServiceGetIssue, UpdateIssue, ApproveIssue, RejectIssue, RequestIssuename: projects/{project}/issues/{issue}
IssueServiceListIssueComments, CreateIssueComment, UpdateIssueCommentparent: projects/{project}/issues/{issue}
PlanServiceListPlans, CreatePlanparent: projects/{project}
PlanServiceGetPlan, UpdatePlan, RunPlanChecksname: projects/{project}/plans/{plan}
PlanServiceGetPlanCheckRun, CancelPlanCheckRunname: projects/{project}/plans/{plan}/planCheckRun
ProjectServiceGetIamPolicy, SetIamPolicyresource: projects/{project}
ProjectServiceAddWebhook, TestWebhookproject: projects/{project}
ProjectServiceUpdateWebhook, RemoveWebhookname: projects/{project}/webhooks/{webhook}
ReleaseServiceListReleases, CreateRelease, CheckRelease, ListReleaseCategoriesparent: projects/{project}
ReleaseServiceGetRelease, UpdateRelease, DeleteRelease, UndeleteReleasename: projects/{project}/releases/{release}
RolloutServiceListRolloutsparent: projects/{project}
RolloutServiceCreateRolloutparent: projects/{project}/plans/{plan}
RolloutServiceGetRolloutname: projects/{project}/plans/{plan}/rollout
RolloutServiceBatchRunTasks, BatchSkipTasksparent: projects/{project}/plans/{plan}/rollout/stages/{stage}
RolloutServiceListTaskRuns, BatchCancelTaskRunsparent: projects/{project}/plans/{plan}/rollout/stages/{stage}/tasks/{task}
RolloutServiceGetTaskRun, GetTaskRunLog, GetTaskRunSession, PreviewTaskRunRollbackname: projects/{project}/.../taskRuns/{taskRun}
SheetServiceCreateSheet, BatchCreateSheetsparent: projects/{project}
SheetServiceGetSheetname: projects/{project}/sheets/{sheet}
WorksheetServiceCreateWorksheet, SearchWorksheetsparent: projects/{project}
WorksheetServiceGetWorksheet, UpdateWorksheet, DeleteWorksheet, UpdateWorksheetOrganizername: projects/{project}/worksheets/{worksheet}
WorksheetServiceBatchUpdateWorksheetOrganizerworkspace-level batch

instances/{instance} Parent

ServiceMethodResource Pattern
InstanceRoleServiceListInstanceRolesparent: instances/{instance}

instances/{instance}/databases/{database} Parent

These APIs are scoped to a database. ACL looks up the database with workspace filter and resolves to the parent project.

ServiceMethodResource Pattern
DatabaseServiceGetDatabase, UpdateDatabase, SyncDatabasename: instances/{instance}/databases/{database}
DatabaseServiceGetDatabaseMetadata, GetDatabaseSchema, GetDatabaseSDLSchema, GetSchemaStringname: instances/{instance}/databases/{database}/...
DatabaseServiceListChangelogsparent: instances/{instance}/databases/{database}
DatabaseServiceGetChangelog, DiffSchemaname: instances/{instance}/databases/{database}/changelogs/{changelog}
DatabaseServiceBatchUpdateDatabases, BatchSyncDatabasesparent: instances/{instance}
DatabaseCatalogServiceGetDatabaseCatalog, UpdateDatabaseCatalogname: instances/{instance}/databases/{database}/catalog
RevisionServiceListRevisions, BatchCreateRevisionsparent: instances/{instance}/databases/{database}
RevisionServiceGetRevision, DeleteRevisionname: instances/{instance}/databases/{database}/revisions/{revision}
SQLServiceQuery, Export, AdminExecutename: instances/{instance}/databases/{database}

Multi-Parent APIs

These APIs accept different parent types depending on the use case.

DatabaseService — ListDatabases / BatchGetDatabases

Accepts multiple parent types:

  • projects/{project} — list databases in a project
  • instances/{instance} — list databases in an instance
  • workspaces/{workspace} — list all databases in a workspace

ServiceAccountService / WorkloadIdentityService — List / Create

Accepts multiple parent types:

  • projects/{project} — project-scoped accounts
  • workspaces/{workspace} — workspace-scoped accounts

OrgPolicyService — All Methods

Accepts 5 different parent/name levels:

  • workspaces/{workspace}/policies/{policy}
  • projects/{project}/policies/{policy}
  • environments/{environment}/policies/{policy}
  • instances/{instance}/policies/{policy}
  • instances/{instance}/databases/{database}/policies/{policy}

AuditLogService — SearchAuditLogs / ExportAuditLogs

Accepts:

  • projects/{project} — project-scoped audit logs
  • No parent — workspace-level audit logs

WorkspaceService — GetIamPolicy / SetIamPolicy

  • workspaces/{workspace} resource

SQLService — DiffMetadata / AICompletion / SearchQueryHistories

  • Workspace-level utility methods (no resource parent)

ACL Resource Resolution Summary

The ACL interceptor (populateRawResources) handles these patterns:

workspaces/{id}                    → ResourceTypeWorkspace (direct match)
projects/{id}[/...]                → ResourceTypeProject (extract project ID)
instances/{id}/databases/{name}... → Look up database → ResourceTypeProject (parent project)
instances/{id}[/...]               → Look up instance → ResourceTypeWorkspace
(default)                          → ResourceTypeWorkspace (from context)

All API resource patterns map to one of these ACL cases. No API endpoint bypasses workspace validation (except allow_without_credential methods like Login/Signup).