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

Function getUsersWithPermissions

apps/sim/lib/workspaces/permissions/utils.ts:263–343  ·  view source on GitHub ↗
(
  workspaceId: string
)

Source from the content-addressed store, hash-verified

261}
262
263export async function getUsersWithPermissions(
264 workspaceId: string
265): Promise<WorkspaceMemberWithRole[]> {
266 const ws = await getWorkspaceWithOwner(workspaceId)
267 if (!ws) return []
268
269 const explicitRows = await db
270 .select({
271 userId: user.id,
272 email: user.email,
273 name: user.name,
274 image: user.image,
275 permissionType: permissions.permissionType,
276 joinedAt: permissions.createdAt,
277 userOrganizationId: member.organizationId,
278 })
279 .from(permissions)
280 .innerJoin(user, eq(permissions.userId, user.id))
281 .leftJoin(member, eq(member.userId, user.id))
282 .where(and(eq(permissions.entityType, 'workspace'), eq(permissions.entityId, workspaceId)))
283
284 const byUser = new Map<string, WorkspaceMemberWithRole>()
285
286 for (const row of explicitRows) {
287 const isOwner = row.userId === ws.ownerId
288 byUser.set(row.userId, {
289 userId: row.userId,
290 email: row.email,
291 name: row.name,
292 image: row.image ?? null,
293 permissionType: row.permissionType,
294 isExternal: !isOwner && row.userOrganizationId !== ws.organizationId,
295 joinedAt: row.joinedAt.toISOString(),
296 roleSource: isOwner ? 'owner' : 'explicit',
297 })
298 }
299
300 if (ws.organizationId) {
301 const orgAdmins = await db
302 .select({
303 userId: user.id,
304 email: user.email,
305 name: user.name,
306 image: user.image,
307 joinedAt: member.createdAt,
308 })
309 .from(member)
310 .innerJoin(user, eq(member.userId, user.id))
311 .where(
312 and(
313 eq(member.organizationId, ws.organizationId),
314 inArray(member.role, [...ORG_ADMIN_ROLES])
315 )
316 )
317
318 for (const row of orgAdmins) {
319 const isOwner = row.userId === ws.ownerId
320 const existing = byUser.get(row.userId)

Callers 6

utils.test.tsFile · 0.90
promoteForkFunction · 0.90
buildWorkspaceMdDataFunction · 0.90
materializeMethod · 0.90
route.tsFile · 0.90
route.tsFile · 0.90

Calls 4

getWorkspaceWithOwnerFunction · 0.85
setMethod · 0.65
getMethod · 0.65
eqFunction · 0.50

Tested by

no test coverage detected