UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

33 lines 1.44 kB
import { err, ok } from 'true-myth/result'; import { ensureMinimumServerRoleFragment } from '../../../fragments/server.js'; import { ProjectNotFoundError } from '../../../domain/authErrors.js'; import { ensureImplicitProjectMemberWithWriteAccessFragment } from '../../../fragments/projects.js'; import { Roles } from '../../../../core/constants.js'; import { ProjectVisibility } from '../../../domain/projects/types.js'; export const canCreateProjectCommentPolicy = (loaders) => async ({ userId, projectId }) => { // Ensure server access const ensuredServerRole = await ensureMinimumServerRoleFragment(loaders)({ userId }); if (ensuredServerRole.isErr) { return err(ensuredServerRole.error); } // Check if public commenting enabled const project = await loaders.getProject({ projectId }); if (!project) return err(new ProjectNotFoundError()); const allowPublicCommenting = project.visibility === ProjectVisibility.Public && project.allowPublicComments; if (allowPublicCommenting) return ok(); // Not public, ensure proper project write access const ensuredWriteAccess = await ensureImplicitProjectMemberWithWriteAccessFragment(loaders)({ userId, projectId, role: Roles.Stream.Reviewer }); if (ensuredWriteAccess.isErr) { return err(ensuredWriteAccess.error); } return ok(); }; //# sourceMappingURL=canCreate.js.map