UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

37 lines 1.63 kB
import { err, ok } from 'true-myth/result'; import { ProjectNoAccessError, VersionNotFoundError } from '../../../domain/authErrors.js'; import { ensureImplicitProjectMemberWithWriteAccessFragment, ensureMinimumProjectRoleFragment } from '../../../fragments/projects.js'; import { Roles } from '../../../../core/constants.js'; export const canUpdateProjectVersionPolicy = (loaders) => async ({ projectId, versionId, userId }) => { // Ensure general write access const ensuredWriteAccess = await ensureImplicitProjectMemberWithWriteAccessFragment(loaders)({ userId, projectId }); if (ensuredWriteAccess.isErr) { return err(ensuredWriteAccess.error); } // Must be author or project owner to update version const version = await loaders.getVersion({ versionId, projectId }); if (!version) { return err(new VersionNotFoundError()); } if (!version.authorId || version.authorId !== userId) { // Not author - validate that user is project owner const ensuredOwner = await ensureMinimumProjectRoleFragment(loaders)({ userId: userId, projectId, role: Roles.Stream.Owner }); if (ensuredOwner.isErr) { switch (ensuredOwner.error.code) { case ProjectNoAccessError.code: return err(new ProjectNoAccessError("You do not have access to update other contributors' versions in this project")); default: return err(ensuredOwner.error); } } } return ok(); }; //# sourceMappingURL=canUpdate.js.map