UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

47 lines 1.92 kB
import { ServerNoAccessError, ServerNoSessionError, ServerNotEnoughPermissionsError } from '../domain/authErrors.js'; import { Roles } from '../../core/constants.js'; import { err, ok } from 'true-myth/result'; import { throwUncoveredError } from '../../core/index.js'; import { isMinimumServerRole } from '../domain/logic/roles.js'; /** * Ensure user has a minimum server role */ export const ensureMinimumServerRoleFragment = (loaders) => async ({ userId, role }) => { if (!userId?.length) return err(new ServerNoSessionError()); const requiredServerRole = role || Roles.Server.Guest; const isLowestRequestedRole = [Roles.Server.Guest, Roles.Server.ArchivedUser].includes(requiredServerRole); const userServerRole = await loaders.getServerRole({ userId }); if (!userServerRole) return err(new ServerNoAccessError()); const hasRequiredRole = isMinimumServerRole(userServerRole, requiredServerRole); return hasRequiredRole ? ok() : err(isLowestRequestedRole ? new ServerNoAccessError() : new ServerNotEnoughPermissionsError()); }; /** * Check if user has admin override enabled */ export const checkIfAdminOverrideEnabledFragment = (loaders) => async ({ userId }) => { const adminOverrideAvailable = await loaders.getAdminOverrideEnabled(); if (!adminOverrideAvailable) return ok(false); const hasAdminRole = await ensureMinimumServerRoleFragment(loaders)({ userId, role: Roles.Server.Admin }); if (hasAdminRole.isErr) { switch (hasAdminRole.error.code) { case ServerNoAccessError.code: case ServerNoSessionError.code: case ServerNotEnoughPermissionsError.code: return ok(false); default: throwUncoveredError(hasAdminRole.error); } } return ok(true); }; //# sourceMappingURL=server.js.map