StreamTrace BETA
Documentation menu

Authentication & Access Control

Roles & permissions

How Stream Trace's role-based access control works, and the built-in roles.

Stream Trace keeps authorization in its own application model. Permissions are grouped into roles, and roles are granted either globally or per team.

Scopes

  • Global permissions apply instance-wide (managing users, reading the audit log).
  • Team permissions apply to the streams owned by a specific team. A user gets team permissions by holding a team-scoped role on a team that owns the stream.

instance_admin is special: it holds every permission and bypasses stream ownership checks entirely.

Permissions

Global:

PermissionGrants
users.manageCreate, invite, update users; revoke sessions.
teams.manageCreate and update teams; manage membership.
roles.manageCreate, update, and delete custom roles.
stream_ownership.manageAssign or override stream ownership.
audit.readRead the audit log.
system.settings.readRead effective system configuration.

Team-scoped:

PermissionGrants
streams.readList streams and view metadata.
streams.messages.readRead message metadata and non-sensitive payloads.
streams.messages.read_sensitiveRead full payloads (may contain sensitive data).
streams.messages.publishPublish messages.
streams.messages.replayReplay messages to consumers.
dlq.readView DLQ cases.
dlq.manageRetry and discard DLQ cases.
traces.readView traces for in-scope streams.

Sensitive payloads. streams.messages.read lets a user see message metadata and non-sensitive payloads; full payload access requires streams.messages.read_sensitive. Grant it deliberately.

Built-in roles

RoleScopePermissions
instance_adminglobalAll permissions; bypasses stream ownership.
security_auditorglobalaudit.read, system.settings.read
access_adminglobalusers.manage, teams.manage, roles.manage, stream_ownership.manage, system.settings.read
stream_adminteamAll team-scoped permissions
stream_operatorteamstreams.read, streams.messages.read, streams.messages.publish, streams.messages.replay, dlq.read, dlq.manage, traces.read
stream_viewerteamstreams.read, streams.messages.read, dlq.read, traces.read
sensitive_viewerteamstreams.read, streams.messages.read, streams.messages.read_sensitive, dlq.read, traces.read

Other global roles only grant instance-level permissions - stream access always comes from team-scoped roles on teams that own a stream.

Custom roles

Users with roles.manage can create custom roles in the admin console, choosing any combination of the permissions above and a scope. See Administration and the Permissions reference.