Files
speckle-server/packages/server/modules/workspaces/authz/loaders/index.ts
T
Kristaps Fabians Geikins c54d15fd93 feat: authz frontend foundation + reworked errors (#4275)
* feat: authz frontend foundation + reworked errors

* lint fixes

* test fix

* fixed noCache() util
2025-03-27 16:13:35 +02:00

47 lines
1.5 KiB
TypeScript

import { db } from '@/db/knex'
import { defineModuleLoaders } from '@/modules/loaders'
import {
getUserSsoSessionFactory,
getWorkspaceSsoProviderRecordFactory
} from '@/modules/workspaces/repositories/sso'
import {
getWorkspaceFactory,
getWorkspaceRoleForUserFactory
} from '@/modules/workspaces/repositories/workspaces'
import { Authz } from '@speckle/shared'
import { err, ok } from 'true-myth/result'
export default defineModuleLoaders(async () => {
const getWorkspace = getWorkspaceFactory({ db })
return {
getWorkspace: async ({ workspaceId }) => {
const workspace = await getWorkspace({ workspaceId })
if (!workspace) return err(new Authz.WorkspaceNotFoundError())
return ok(workspace)
},
getWorkspaceRole: async ({ userId, workspaceId }) => {
const role = await getWorkspaceRoleForUserFactory({ db })({
userId,
workspaceId
})
if (!role) return err(new Authz.WorkspaceRoleNotFoundError())
return ok(role.role)
},
getWorkspaceSsoSession: async ({ userId, workspaceId }) => {
const ssoSession = await getUserSsoSessionFactory({ db })({
userId,
workspaceId
})
if (!ssoSession) return err(new Authz.WorkspaceSsoSessionNotFoundError())
return ok(ssoSession)
},
getWorkspaceSsoProvider: async ({ workspaceId }) => {
const ssoProvider = await getWorkspaceSsoProviderRecordFactory({ db })({
workspaceId
})
if (!ssoProvider) return err(new Authz.WorkspaceSsoProviderNotFoundError())
return ok(ssoProvider)
}
}
})