Files
speckle-server/packages/server/modules/workspaces/helpers/roles.ts
T
Chuck Driesler 8ec0d364cb Chuck/web 1614 unify workspaceproject role creation (#2795)
* 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>
2024-08-30 09:56:56 +02:00

33 lines
1.0 KiB
TypeScript

import { Roles, WorkspaceRoles } from '@speckle/shared'
import { WorkspaceAcl } from '@/modules/workspacesCore/domain/types'
import { WorkspaceRole } from '@/modules/core/graph/generated/graphql'
export const isUserLastWorkspaceAdmin = (
workspaceRoles: Pick<WorkspaceAcl, 'userId' | 'role'>[],
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
}
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)
}