Docs/ Security/ Teams & RBAC

Teams & RBAC

Organize your team with role-based access control, project-level permissions, and a complete audit trail of all actions.

Creating a Team

Teams allow multiple users to collaborate on the same sh0 instance. The first user (created during installation) is automatically the team owner with full admin privileges.

  1. Navigate to Settings → Team in the dashboard.
  2. Your default team is created automatically. You can rename it here.
  3. Add a team description and avatar (optional).
Team settings page with team name and description
Note
In the current version, sh0 supports a single team per instance. Multi-team support (for agencies managing multiple clients) is planned for a future release.

Inviting Members

Admins can invite new members to the team by email. The invited user will receive an email with a link to set up their account.

  1. Go to Settings → Team → Members.
  2. Click Invite Member.
  3. Enter the email address and select a role (Admin, Developer, or Viewer).
  4. Click Send Invitation.
Invite member dialog with email field and role selector
Terminal
curl -X POST https://your-server:9000/api/team/invite \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "role": "developer"
  }'

Pending invitations are shown in the Members list with an Invited badge. You can resend or revoke an invitation at any time.

Role Types

sh0 provides three built-in roles with increasing levels of access:

RoleDescriptionUse Case
AdminFull access to all resources, settings, team management, and billing.CTOs, DevOps leads, infrastructure owners
DeveloperCan create, deploy, and manage apps. Cannot access team settings or server configuration.Software engineers, DevOps team members
ViewerRead-only access. Can view apps, logs, and metrics but cannot modify anything.Stakeholders, QA team, auditors
Team members list showing different roles with badges

Permissions Matrix

Here is the complete breakdown of what each role can do:

ActionAdminDeveloperViewer
View apps & dashboardsYesYesYes
View logs & metricsYesYesYes
Create & deploy appsYesYesNo
Manage environment variablesYesYesNo
Manage domains & SSLYesYesNo
Access terminalYesYesNo
Manage team membersYesNoNo
Server settings & nodesYesNoNo
Billing & licenseYesNoNo

Project-Level Access

In addition to global roles, you can restrict a user's access to specific projects. This is useful when different team members work on different applications.

  1. Go to the project's Settings → Access tab.
  2. Click Add Member and select a team member.
  3. Choose the access level for this project (Full Access, Deploy Only, View Only).
Project-level access settings showing member permissions
Tip
By default, Admins have access to all projects. Developers see all projects unless you explicitly restrict them. Viewers can only see projects they are granted access to.

Audit Log

sh0 records every significant action performed by team members. The audit log provides a complete timeline of who did what and when.

Tracked events include:

  • Login and logout events
  • App creation, deployment, and deletion
  • Environment variable changes
  • Domain additions and removals
  • Team member invitations and role changes
  • Settings modifications
  • Database operations (backup, restore, delete)
Audit log showing a timeline of team actions with user, action, and timestamp
Terminal
curl https://your-server:9000/api/team/audit-log?page=1&per_page=50 \
  -H "Authorization: Bearer YOUR_TOKEN"
Note
Audit logs are retained for 90 days by default. You can configure the retention period in Settings → Security.

Removing Members

Admins can remove team members from Settings → Team → Members. Removing a member:

  • Immediately revokes all their active sessions.
  • Removes their access to all projects and resources.
  • Does not delete any resources they created (apps, databases, etc.).
  • Preserves their actions in the audit log for accountability.
Terminal
curl -X DELETE https://your-server:9000/api/team/members/usr_abc123 \
  -H "Authorization: Bearer YOUR_TOKEN"
Warning
The team owner cannot be removed. To transfer ownership, contact support or reassign the owner role from Settings → Team first.