UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

42 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.canReadDashboardPolicy = void 0; const result_1 = require("true-myth/result"); const authErrors_js_1 = require("../../domain/authErrors.js"); const dashboards_js_1 = require("../../fragments/dashboards.js"); const workspaceRole_js_1 = require("../../checks/workspaceRole.js"); const constants_js_1 = require("../../../core/constants.js"); const server_js_1 = require("../../fragments/server.js"); const canReadDashboardPolicy = (loaders) => async ({ userId, dashboardId }) => { const ensuredServerRole = await (0, server_js_1.ensureMinimumServerRoleFragment)(loaders)({ userId, role: constants_js_1.Roles.Server.User }); if (ensuredServerRole.isErr) return (0, result_1.err)(ensuredServerRole.error); const isDashboardsEnabled = await (0, dashboards_js_1.ensureDashboardsEnabledFragment)(loaders)({}); if (isDashboardsEnabled.isErr) return (0, result_1.err)(isDashboardsEnabled.error); const dashboard = await loaders.getDashboard({ dashboardId }); if (!dashboard) return (0, result_1.err)(new authErrors_js_1.DashboardNotFoundError()); const { workspaceId } = dashboard; const ensuredFeatureAccess = await (0, dashboards_js_1.ensureWorkspaceDashboardsFeatureAccessFragment)(loaders)({ workspaceId }); if (ensuredFeatureAccess.isErr) return (0, result_1.err)(ensuredFeatureAccess.error); const hasAdminAccess = await (0, server_js_1.checkIfAdminOverrideEnabledFragment)(loaders)({ userId }); if (hasAdminAccess.isOk && hasAdminAccess.value) return (0, result_1.ok)(); const isWorkspaceMember = await (0, workspaceRole_js_1.hasMinimumWorkspaceRole)(loaders)({ userId: userId, workspaceId, role: constants_js_1.Roles.Workspace.Member }); if (!isWorkspaceMember) return (0, result_1.err)(new authErrors_js_1.WorkspaceNotEnoughPermissionsError()); return (0, result_1.ok)(); }; exports.canReadDashboardPolicy = canReadDashboardPolicy; //# sourceMappingURL=canRead.js.map