Workspaces and members
A workspace is the top-level tenancy unit for backups, packs, and snapshots. People access a workspace through memberships: each member has a role (and optionally extra scope tweaks). This guide describes how that model surfaces in the Lighthouse BaaS Go SDK, JavaScript/TypeScript SDK, and CLI.
For how roles map to scopes, API-key intersection, and HTTP semantics, see Roles, scopes, and permissions. To create your first workspace from the UI, see Web Portal & Free Workspace.
All snippets assume the imports and an authenticated client:
- Go SDK
- JS SDK
- CLI
import (
sdkclient "github.com/lighthouse-web3/baas-go-sdk/client"
sdktypes "github.com/lighthouse-web3/baas-go-sdk/types"
)
import {
BackupClient,
RoleMember,
RoleAdmin,
ScopeSnapshotsRead,
} from "@lighthouse-web3/baas-js-sdk";
Install and authenticate once; the CLI stores the selected workspace in its active profile:
npm install -g @lighthouse-web3/baas-js-sdk
baas auth login --api-key
Conceptsβ
Membersβ
A workspace member ties a Lighthouse user to one workspace. The API returns metadata such as email, display name, role, optional extraScopes / revokedScopes, and when the membership was created.
Rolesβ
Roles are string labels that map to a default set of permissions on the server. The SDK defines these constants:
RoleOwner(owner)RoleAdmin(admin)RoleMember(member)RoleViewer(viewer)
When inviting (WorkspaceMemberInvite) or updating a memberβs role (WorkspaceMemberUpdate), use admin, member, or viewer. Do not send owner in invite requests.
Scopesβ
Beyond role defaults, the API can grant extraScopes or withhold revokedScopes. The SDK exposes constants including:
ScopeBackupWrite,ScopeBackupReadScopeRestoreWrite,ScopeRestoreReadScopeSnapshotsReadScopeUserReadScopeAPIKeysManageScopeWorkspaceManage
Workspaces: create, select, and inspectβ
- Go SDK
- JS SDK
- CLI
wsList, err := client.ListWorkspaces()
if err != nil {
log.Fatal(err)
}
var workspaceID string
if len(wsList.Workspaces) == 0 {
created, err := client.CreateWorkspace(sdktypes.WorkspaceCreateRequest{
Name: "prod-db-backups",
})
if err != nil {
log.Fatal(err)
}
workspaceID = created.WorkspaceID
} else {
workspaceID = wsList.Workspaces[0].WorkspaceID
}
client.SetWorkspaceID(workspaceID)
log.Printf("Using workspace: %s", workspaceID)
const wsList = await client.listWorkspaces();
let workspaceId;
if (wsList.workspaces.length === 0) {
const created = await client.createWorkspace({ name: "prod-db-backups" });
workspaceId = created.workspaceId;
} else {
workspaceId = wsList.workspaces[0].workspaceId;
}
client.setWorkspaceId(workspaceId);
console.log(`Using workspace: ${workspaceId}`);
Workspaces are created in the Lighthouse portal. List, select, inspect, or rename one from the CLI:
baas workspace list
baas workspace use <workspaceId>
baas workspace get
baas workspace update <workspaceId> --name prod-db-backups
Member operations with BackupClientβ
Note: You must have sufficient permissions (typically admin or owner role, with appropriate scopes) to perform any of the following member operations.
List membersβ
- Go SDK
- JS SDK
- CLI
members, err := client.ListWorkspaceMembers(workspaceID)
if err != nil {
return err
}
for _, m := range members {
_ = m
}
const members = await client.listWorkspaceMembers(workspaceId);
for (const m of members) {
console.log(m.userId, m.email, m.role);
}
baas workspace member list
Invite a memberβ
- Go SDK
- JS SDK
- CLI
member, err := client.AddWorkspaceMember(workspaceID, sdktypes.WorkspaceMemberInvite{
Email: "dba@example.com",
Role: sdktypes.RoleMember,
})
if err != nil {
return err
}
_ = member
const member = await client.addWorkspaceMember(workspaceId, {
email: "dba@example.com",
role: RoleMember,
});
baas workspace member add --email dba@example.com --role member
Update role and scopesβ
- Go SDK
- JS SDK
- CLI
updated, err := client.UpdateWorkspaceMember(workspaceID, userID, sdktypes.WorkspaceMemberUpdate{
Role: sdktypes.RoleAdmin,
ExtraScopes: []string{sdktypes.ScopeSnapshotsRead},
RevokedScopes: nil,
})
if err != nil {
return err
}
_ = updated
const updated = await client.updateWorkspaceMember(workspaceId, userId, {
role: RoleAdmin,
extraScopes: [ScopeSnapshotsRead],
});
baas workspace member update <userId> \
--role admin \
--add-scope snapshots:read
Remove a memberβ
- Go SDK
- JS SDK
- CLI
err := client.RemoveWorkspaceMember(workspaceID, userID)
if err != nil {
return err
}
await client.removeWorkspaceMember(workspaceId, userId);
baas workspace member remove <userId> --yes