Files
speckle-server/packages/server/modules/workspaces/helpers/roles.ts
T
Kristaps Fabians Geikins 455b21cba3 fix(server): manual workspace role assignment on project invite create + more bugfixes (#2581)
* prep for new projectinvite create mutation

* fix for serverRole not being taken into account in stream invite

* new workspace invite create mutation
2024-08-06 13:42:10 +03:00

48 lines
1.4 KiB
TypeScript

import { Roles, StreamRoles, WorkspaceRoles } from '@speckle/shared'
import { WorkspaceAcl } from '@/modules/workspacesCore/domain/types'
import { WorkspaceRole } from '@/modules/core/graph/generated/graphql'
export const isUserLastWorkspaceAdmin = (
workspaceRoles: WorkspaceAcl[],
userId: string
): boolean => {
const workspaceAdmins = workspaceRoles.filter(
({ role }) => role === Roles.Workspace.Admin
)
const isUserAdmin = workspaceAdmins.some((role) => role.userId === userId)
return isUserAdmin && workspaceAdmins.length === 1
}
/**
* Given a user's workspace role, return the role they should have for workspace projects.
*/
export const mapWorkspaceRoleToProjectRole = (
workspaceRole: WorkspaceRoles
): StreamRoles => {
switch (workspaceRole) {
case Roles.Workspace.Guest:
case Roles.Workspace.Member:
return Roles.Stream.Reviewer
case Roles.Workspace.Admin:
return Roles.Stream.Owner
}
}
export const mapGqlWorkspaceRoleToMainRole = (
gqlRole: WorkspaceRole
): WorkspaceRoles => {
switch (gqlRole) {
case WorkspaceRole.Admin:
return Roles.Workspace.Admin
case WorkspaceRole.Member:
return Roles.Workspace.Member
case WorkspaceRole.Guest:
return Roles.Workspace.Guest
}
}
export const isWorkspaceRole = (role: string): role is WorkspaceRoles => {
return (Object.values(Roles.Workspace) as string[]).includes(role)
}