UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

45 lines 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.canDeleteDashboardPolicy = 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 workspaceSeat_js_1 = require("../../checks/workspaceSeat.js"); const dashboards_js_2 = require("../../checks/dashboards.js"); const server_js_1 = require("../../fragments/server.js"); const canDeleteDashboardPolicy = (loaders) => async ({ userId, dashboardId }) => { 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 isWorkspaceEditorSeat = await (0, workspaceSeat_js_1.hasEditorSeat)(loaders)({ userId: userId, workspaceId }); if (!isWorkspaceEditorSeat) return (0, result_1.err)(new authErrors_js_1.WorkspaceNoEditorSeatError()); const isWorkspaceAdmin = await (0, workspaceRole_js_1.hasMinimumWorkspaceRole)(loaders)({ userId: userId, workspaceId, role: constants_js_1.Roles.Workspace.Admin }); const isOwner = await (0, dashboards_js_2.isDashboardOwner)(loaders)({ userId: userId, dashboardId }); if (!isWorkspaceAdmin && !isOwner) return (0, result_1.err)(new authErrors_js_1.DashboardNotOwnerError()); return (0, result_1.ok)(); }; exports.canDeleteDashboardPolicy = canDeleteDashboardPolicy; //# sourceMappingURL=canDelete.js.map