UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

37 lines 1.48 kB
import { err, ok } from 'true-myth/result'; import { Roles } from '../../../core/constants.js'; import { ProjectLastOwnerError, ProjectNoAccessError } from '../../domain/authErrors.js'; import { ensureMinimumServerRoleFragment } from '../../fragments/server.js'; import { ensureProjectWorkspaceAccessFragment } from '../../fragments/projects.js'; export const canLeaveProjectPolicy = (loaders) => async ({ userId, projectId }) => { const ensuredServerRole = await ensureMinimumServerRoleFragment(loaders)({ userId }); if (ensuredServerRole.isErr) { return err(ensuredServerRole.error); } const ensuredWorkspaceAccess = await ensureProjectWorkspaceAccessFragment(loaders)({ userId: userId, projectId }); if (ensuredWorkspaceAccess.isErr) { return err(ensuredWorkspaceAccess.error); } // Ensure user is not the last owner const projectRole = await loaders.getProjectRole({ projectId, userId: userId }); if (!projectRole) { return err(new ProjectNoAccessError('You must be a project member to leave')); } if (projectRole !== Roles.Stream.Owner) { return ok(); } const ownerCounts = await loaders.getProjectRoleCounts({ projectId, role: Roles.Stream.Owner }); if (ownerCounts < 2) { return err(new ProjectLastOwnerError('As the last owner of the project, you cannot leave')); } return ok(); }; //# sourceMappingURL=canLeave.js.map