budibase/packages/server/src/migrations/functions/backfill/global/users.ts

46 lines
1.2 KiB
TypeScript

import { events, db as dbUtils } from "@budibase/backend-core"
import { User, CloudAccount } from "@budibase/types"
// manually define user doc params - normally server doesn't read users from the db
const getUserParams = (props: any) => {
return dbUtils.getDocParams(dbUtils.DocumentTypes.USER, null, props)
}
export const getUsers = async (globalDb: any): Promise<User[]> => {
const response = await globalDb.allDocs(
getUserParams({
include_docs: true,
})
)
return response.rows.map((row: any) => row.doc)
}
export const backfill = async (
globalDb: any,
account: CloudAccount | undefined
) => {
const users = await getUsers(globalDb)
for (const user of users) {
const timestamp = user.createdAt as number
await events.identification.identifyUser(user, account, timestamp)
await events.user.created(user, timestamp)
if (user.admin?.global) {
await events.user.permissionAdminAssigned(user, timestamp)
}
if (user.builder?.global) {
await events.user.permissionBuilderAssigned(user, timestamp)
}
if (user.roles) {
for (const [appId, role] of Object.entries(user.roles)) {
await events.role.assigned(user, role, timestamp)
}
}
}
return users.length
}