Files
speckle-server/packages/server/modules/workspaces/authz/loaders/index.ts
T
Kristaps Fabians Geikins a6a4ceee86 feat: true-myth result structures & other auth policy improvements (#4262)
* fixing up typing

* better dynamic loader mechanism

* buildReqLoaders cleanup

* added caching to loaders

* ensuring all loaders are async

* fe2 plugins error handling fix

* feat(shared): true-myth result structures & other auth policy improvements

* moving workspaceCore loaders to correct place
2025-03-25 17:49:02 +01: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(Authz.WorkspaceNotFoundError)
return ok(workspace)
},
getWorkspaceRole: async ({ userId, workspaceId }) => {
const role = await getWorkspaceRoleForUserFactory({ db })({
userId,
workspaceId
})
if (!role) return err(Authz.WorkspaceRoleNotFoundError)
return ok(role.role)
},
getWorkspaceSsoSession: async ({ userId, workspaceId }) => {
const ssoSession = await getUserSsoSessionFactory({ db })({
userId,
workspaceId
})
if (!ssoSession) return err(Authz.WorkspaceSsoSessionNotFoundError)
return ok(ssoSession)
},
getWorkspaceSsoProvider: async ({ workspaceId }) => {
const ssoProvider = await getWorkspaceSsoProviderRecordFactory({ db })({
workspaceId
})
if (!ssoProvider) return err(Authz.WorkspaceSsoProviderNotFoundError)
return ok(ssoProvider)
}
}
})