diff --git a/packages/backend-core/src/db/couch/DatabaseImpl.ts b/packages/backend-core/src/db/couch/DatabaseImpl.ts index 502cd5594b..69f0fd64ea 100644 --- a/packages/backend-core/src/db/couch/DatabaseImpl.ts +++ b/packages/backend-core/src/db/couch/DatabaseImpl.ts @@ -222,9 +222,12 @@ export class DatabaseImpl implements Database { } async getMultiple( - ids: string[], + ids?: string[], opts?: { allowMissing?: boolean; excludeDocs?: boolean } ): Promise { + if (!ids || ids.length === 0) { + return [] + } // get unique ids = [...new Set(ids)] const includeDocs = !opts?.excludeDocs diff --git a/packages/backend-core/src/users/utils.ts b/packages/backend-core/src/users/utils.ts index 7c8cbb083a..01d8a0bdca 100644 --- a/packages/backend-core/src/users/utils.ts +++ b/packages/backend-core/src/users/utils.ts @@ -16,30 +16,26 @@ export const hasAdminPermissions = sdk.users.hasAdminPermissions export const hasBuilderPermissions = sdk.users.hasBuilderPermissions export const hasAppBuilderPermissions = sdk.users.hasAppBuilderPermissions -async function getGroups(groupIds?: string[]) { - if (groupIds?.length) { - const db = context.getGlobalDB() - return await db.getMultiple(groupIds, { allowMissing: true }) - } - return [] -} - export async function creatorsInList( users: (User | ContextUser)[], groups?: UserGroup[] ) { - if (!groups) { - const groupIds = users.flatMap(user => user.userGroups || []) - if (groupIds.length) { - groups = await getGroups(groupIds) - } + const groupIds = [ + ...new Set( + users.filter(user => user.userGroups).flatMap(user => user.userGroups!) + ), + ] + if (groupIds.length) { + const db = context.getGlobalDB() + groups = await db.getMultiple(groupIds) } return users.map(user => isCreatorSync(user, groups)) } // fetches groups if no provided, but is async and shouldn't be looped with export async function isCreatorAsync(user: User | ContextUser) { - const groups = await getGroups(user.userGroups) + const db = context.getGlobalDB() + const groups = await db.getMultiple(user.userGroups) return isCreatorSync(user, groups) } diff --git a/packages/types/src/sdk/db.ts b/packages/types/src/sdk/db.ts index eb922bd81e..9f99266644 100644 --- a/packages/types/src/sdk/db.ts +++ b/packages/types/src/sdk/db.ts @@ -136,7 +136,7 @@ export interface Database { get(id?: string): Promise tryGet(id?: string): Promise getMultiple( - ids: string[], + ids?: string[], opts?: { allowMissing?: boolean; excludeDocs?: boolean } ): Promise remove(idOrDoc: Document): Promise