8ec0d364cb
* fix(workspaces): transact all simultaneous workspace-project role changes * fix(workspaces): more correct usage of transactions * fix(workspaces): add tests for transaction-based role changes * fix(workspaces): do not leak knex into domain * fix(workspaces): transaction-ify factory functions * fix(workspaces): factory-ify some old functions * fix(workspaces): missed a resolver * chore(workspaces): get tests in order * park it * chore(workspaces): failing tests * WHAT DO YOU WANT * fix(workspaces): i lived bitch * fix(workspaces): remove test that is no longer true * fix(workspaces): better repo/service boundaries * right * fix(workspaces): service in injected * fix(workspaces): repair references * refactor(workspaces): role management rework * chore(workspaces): adjust tests to match new behaviour * lint lint lint * fix(workspaces): fix tests --------- Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { UserEmail } from '@/modules/core/domain/userEmails/types'
|
|
import { GetWorkspaceRoleToDefaultProjectRoleMapping } from '@/modules/workspaces/domain/operations'
|
|
import { WorkspaceDomainsInvalidState } from '@/modules/workspaces/errors/workspace'
|
|
import { WorkspaceDomain } from '@/modules/workspacesCore/domain/types'
|
|
import { Roles } from '@speckle/shared'
|
|
|
|
export const userEmailsCompliantWithWorkspaceDomains = ({
|
|
userEmails,
|
|
workspaceDomains
|
|
}: {
|
|
userEmails: UserEmail[]
|
|
workspaceDomains: WorkspaceDomain[]
|
|
}): boolean =>
|
|
anyEmailCompliantWithWorkspaceDomains({
|
|
emails: userEmails.filter((e) => e.verified).map((e) => e.email),
|
|
workspaceDomains
|
|
})
|
|
|
|
export const anyEmailCompliantWithWorkspaceDomains = ({
|
|
emails,
|
|
workspaceDomains
|
|
}: {
|
|
emails: string[]
|
|
workspaceDomains: WorkspaceDomain[]
|
|
}): boolean => {
|
|
const validWorkspaceDomains = workspaceDomains.filter((domain) => domain.verified)
|
|
|
|
// we must have min 1 domain to validate compliance
|
|
if (!validWorkspaceDomains.length) throw new WorkspaceDomainsInvalidState()
|
|
|
|
for (const email of emails) {
|
|
if (validWorkspaceDomains.some((domain) => email.endsWith(domain.domain)))
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
/**
|
|
* Given a user's workspace role, return the initial role they should have for workspace projects.
|
|
*/
|
|
export const mapWorkspaceRoleToInitialProjectRole: GetWorkspaceRoleToDefaultProjectRoleMapping =
|
|
async () => ({
|
|
[Roles.Workspace.Guest]: null,
|
|
[Roles.Workspace.Member]: Roles.Stream.Reviewer,
|
|
[Roles.Workspace.Admin]: Roles.Stream.Owner
|
|
})
|