coollabsio/coolify · error · Exception

Only team administrators and owners can modify terminal acce

Error message

Only team administrators and owners can modify terminal access.

What it means

toggleTerminal() on the server Security > Terminal access screen passes authorize('update', $server) but additionally requires the acting user to be an admin or owner of the current team via auth()->user()->isAdmin() (Role::ADMIN rank or higher). Members can view the toggle but cannot flip is_terminal_enabled - enabling SSH terminal access on a server is restricted to team administrators and owners.

Source

Thrown at app/Livewire/Server/Security/TerminalAccess.php:41

        try {
            $this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
            $this->authorize('update', $this->server);
            $this->parameters = get_route_parameters();
            $this->syncData();

        } catch (\Throwable) {
            return redirect()->route('server.index');
        }
    }

    public function toggleTerminal($password, $selectedActions = [])
    {
        try {
            $this->authorize('update', $this->server);

            // Check if user is admin or owner
            if (! auth()->user()->isAdmin()) {
                throw new \Exception('Only team administrators and owners can modify terminal access.');
            }

            // Verify password
            if (! verifyPasswordConfirmation($password, $this)) {
                return 'The provided password is incorrect.';
            }

            // Toggle the terminal setting
            $this->server->settings->is_terminal_enabled = ! $this->server->settings->is_terminal_enabled;
            $this->server->settings->save();

            // Update the local property
            $this->isTerminalEnabled = $this->server->settings->is_terminal_enabled;

            $status = $this->isTerminalEnabled ? 'enabled' : 'disabled';
            $this->dispatch('success', "Terminal access has been {$status}.");

            return true;

View on GitHub (pinned to 70b9acc424)

Solutions

  1. Ask a team admin or owner to toggle terminal access for the server
  2. Have an owner promote the member to admin if they should manage terminal access
  3. Reload the page - the UI should reflect the current role before you retry
  4. Check the user's membership role in the team members screen if access seems wrong

Example fix

// blade: before
<button wire:click="toggleTerminal(...)">Toggle</button>

// blade: after
@if(auth()->user()->isAdmin())
    <button wire:click="toggleTerminal(...)">Toggle</button>
@endif
Defensive patterns

Strategy: validation

Validate before calling

if (! auth()->user()->isAdmin()) {
    // hide/disable the terminal toggle in the UI before toggleTerminal is invoked
}

Try / catch

Catch \Exception (and the incorrect-password string return) in the action; dispatch('error', ...) for the role failure and keep the password-confirmation path separate so users know which check failed.

Prevention

When it happens

Trigger: A MEMBER-role user (or a demoted admin with a stale session) submitting the toggle with their confirmed password; the password itself is verified only after this role check, so a correct password does not bypass it.

Common situations: Role changes after the page was opened; new collaborators invited as members trying to enable terminal; assuming per-server policy alone governs the switch.

Related errors


AI-assisted analysis of coollabsio/coolify@70b9acc424 (2026-08-17). Data as JSON: /api/errors/b6486892e1431992. Report an issue: GitHub.