UNPKG

@datocms/cma-client

Version:
83 lines 4.34 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Role_1 = __importDefault(require("../generated/resources/Role")); function sameValue(a, b) { if ((a === undefined || a === null) && (b === undefined || b === null)) { return true; } return a === b; } function sameRule(obj1, obj2) { for (const key in obj1) { if (!sameValue(obj1[key], obj2[key])) return false; } for (const key in obj2) { if (!sameValue(obj1[key], obj2[key])) return false; } return true; } function applyChanges(currentRules, changes, currentEnvironmentId, context) { if (!changes) { return currentRules; } const { add: rulesToAdd, remove: rulesToRemove } = changes; return [ ...(rulesToRemove ? rulesToRemove.reduce((filteredRules, ruleToRemove) => { const ruleToRemoveWithEnvironmentId = Object.assign(Object.assign({}, ruleToRemove), { environment: currentEnvironmentId }); const foundRule = filteredRules.find((rule) => sameRule(rule, ruleToRemoveWithEnvironmentId)); if (!foundRule) { throw new Error(`Cannot find rule ${JSON.stringify(ruleToRemoveWithEnvironmentId)} to remove in ${context}!`); } return filteredRules.filter((rule) => rule !== foundRule); }, currentRules) : currentRules), ...(rulesToAdd ? rulesToAdd.map((change) => (Object.assign({ environment: currentEnvironmentId }, change))) : []), ]; } class RoleResource extends Role_1.default { /** * Applies a set of changes to the permissions of the current environment */ updateCurrentEnvironmentPermissions(roleId, changes) { return __awaiter(this, void 0, void 0, function* () { const currentEnvironmentId = this.client.config.environment || (yield this.client.environments.list()).find((environment) => environment.meta.primary).id; const role = yield this.find(roleId); const updateItemTypePermissions = Boolean(changes.positive_item_type_permissions || changes.negative_item_type_permissions); const updateUploadPermissions = Boolean(changes.positive_upload_permissions || changes.negative_upload_permissions); const body = Object.assign(Object.assign({}, (updateItemTypePermissions ? { positive_item_type_permissions: applyChanges(role.positive_item_type_permissions, changes.positive_item_type_permissions, currentEnvironmentId, 'positive_item_type_permissions'), negative_item_type_permissions: applyChanges(role.negative_item_type_permissions, changes.negative_item_type_permissions, currentEnvironmentId, 'negative_item_type_permissions'), } : {})), (updateUploadPermissions ? { positive_upload_permissions: applyChanges(role.positive_upload_permissions, changes.positive_upload_permissions, currentEnvironmentId, 'positive_upload_permissions'), negative_upload_permissions: applyChanges(role.negative_upload_permissions, changes.negative_upload_permissions, currentEnvironmentId, 'negative_upload_permissions'), } : {})); return this.update(roleId, body); }); } } exports.default = RoleResource; //# sourceMappingURL=Role.js.map