MCPcopy
hub / github.com/simstudioai/sim / listAccessibleWorkspaceRowsForUser

Function listAccessibleWorkspaceRowsForUser

apps/sim/lib/workspaces/utils.ts:84–127  ·  view source on GitHub ↗
(
  userId: string,
  scope: WorkspaceScope = 'active'
)

Source from the content-addressed store, hash-verified

82 * derived from organization owner/admin role. Deduped with explicit rows first.
83 */
84export async function listAccessibleWorkspaceRowsForUser(
85 userId: string,
86 scope: WorkspaceScope = 'active'
87): Promise<
88 Array<{ workspace: typeof workspaceTable.$inferSelect; permissionType: PermissionType }>
89> {
90 const explicit = await db
91 .select({ workspace: workspaceTable, permissionType: permissions.permissionType })
92 .from(permissions)
93 .innerJoin(workspaceTable, eq(permissions.entityId, workspaceTable.id))
94 .where(
95 scope === 'all'
96 ? and(eq(permissions.userId, userId), eq(permissions.entityType, 'workspace'))
97 : scope === 'archived'
98 ? and(
99 eq(permissions.userId, userId),
100 eq(permissions.entityType, 'workspace'),
101 sql`${workspaceTable.archivedAt} IS NOT NULL`
102 )
103 : and(
104 eq(permissions.userId, userId),
105 eq(permissions.entityType, 'workspace'),
106 isNull(workspaceTable.archivedAt)
107 )
108 )
109 .orderBy(desc(workspaceTable.createdAt))
110
111 const orgRows = await getOrgAdminWorkspaceRows(userId, scope)
112 if (orgRows.length === 0) {
113 return explicit
114 }
115
116 const orgWorkspaceIds = new Set(orgRows.map((ws) => ws.id))
117 const seen = new Set(explicit.map((row) => row.workspace.id))
118
119 const elevatedExplicit = explicit.map((row) =>
120 orgWorkspaceIds.has(row.workspace.id) ? { ...row, permissionType: 'admin' as const } : row
121 )
122 const derived = orgRows
123 .filter((ws) => !seen.has(ws.id))
124 .map((ws) => ({ workspace: ws, permissionType: 'admin' as const }))
125
126 return [...elevatedExplicit, ...derived]
127}
128
129export async function listUserWorkspaces(userId: string, scope: WorkspaceScope = 'active') {
130 const rows = await listAccessibleWorkspaceRowsForUser(userId, scope)

Callers 10

resolveWorkflowIdForUserFunction · 0.90
listWorkflowsForUserFunction · 0.90
utils.test.tsFile · 0.90
getDefaultWorkspaceIdFunction · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
listUserWorkspacesFunction · 0.85

Calls 2

getOrgAdminWorkspaceRowsFunction · 0.85
eqFunction · 0.50

Tested by

no test coverage detected