Skip to content

Roles and Permissions (RBAC)

Oore CI gives each user one instance role. Developers and QA viewers also need explicit project membership; owners and admins have implicit Maintainer access to every project.

Roles

RoleDescription
ownerInstance creator. Full access to everything. Exactly one per instance.
adminFull management access. Can manage users, settings, and all project operations.
developerCan create projects, use assigned operator surfaces, and mutate an assigned project when its project role permits it.
qa_viewerTester-only access to assigned apps, release details, diagnostic logs, and installable artifacts.

Operator surface policy

SurfaceOwnerAdminDeveloperQA Viewer
Operator dashboardFullFullAssigned workNo; tester workspace instead
Create projectsYesYesYesNo
Existing project/build surfacesAll projectsAll projectsAssigned projects; mutations follow project roleAssigned release data only
Users and invitationsManageManageNoNo
SourcesManageManageRead-onlyNo operator route
RunnersManageManageRead-onlyNo operator route
API tokensManageManageManage within developer visibilityNo
NotificationsManageManageNoNo
Preferences and retentionManageManageNoNo
Audit logViewViewNoNo
Runtime updatesManageNoNoNo

Notification routes and all instance-administration routes are owner/admin-only unless the table explicitly narrows access further. Runtime update controls are owner-only.

Project roles

Project roleCapabilities
maintainerFull project access, including project settings and deletion, membership, pipelines and signing, builds, and artifacts.
developerRead the project; manage pipelines and signing; trigger or cancel builds; read artifacts and manage artifact shares. Cannot change project settings or membership.
viewerRead project, pipeline, build, log, and artifact data; download or install artifacts. No project mutations.

Owners and admins resolve to Maintainer for every project. A developer's effective permissions come from the role on that explicit membership. QA viewers are always capped at Viewer, including when legacy membership data contains a higher role.

Project Maintainers can discover only eligible developer and QA-viewer candidates through the project-scoped membership API. This does not grant developer accounts access to the global Users directory.

Route behavior

  • Developers can use the dashboard, project creation, assigned project and build routes, API tokens, and read-only Sources and Runners. Project mutations are checked against the effective project role before mutation UI renders.
  • QA viewers use the canonical / tester workspace. /builds redirects to /; an assigned /builds/:buildId opens tester release detail with release information, install/download action, and secondary diagnostic logs.
  • QA viewers do not receive the operator Projects, Sources, Runners, Users, Notifications, or instance-settings routes.
  • Disallowed direct routes redirect before their mutation interface renders. The backend remains the security boundary.
  • There is no QA-preview or impersonation endpoint. The hosted demo's role selector signs in as a demo persona and does not change a real user's role or session.

User statuses

StatusDescription
activeUser has signed in at least once and can access the system
invitedUser has been invited but hasn't signed in yet
disabledUser account has been deactivated by an admin/owner

Role assignment rules

  • The owner role is assigned during setup and cannot be changed via the API
  • Admins can change roles for developers and QA viewers
  • Owners can change any user's role (except their own)
  • There is exactly one owner per instance
  • New users are assigned a role at invitation time

Enforcement

RBAC is enforced at the API level. Instance operations check the session role; project operations also resolve membership and the effective project role. A project hidden from the user returns 404 Not Found; an allowed project with an insufficient role returns 403 Forbidden. Frontend route guards and hidden controls mirror this policy but do not replace backend enforcement.

Audit events

Role and user changes are logged:

EventTriggered when
user_invitedA new user is invited
role_changedA user's role is modified
user_disabledA user is disabled
user_enabledA disabled user is re-enabled
user_activatedAn invited user signs in for the first time
owner_createdThe owner account is created during setup

Self-hosted mobile CI, built for Flutter.