UNPKG

@controlplane/cli

Version:

Control Plane Corporation CLI

76 lines 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.removePermissions = exports.addPermissions = void 0; const _ = require("lodash"); function addPermissions(current, add) { var _a; const res = []; let perfectMatch = false; for (let b of current !== null && current !== void 0 ? current : []) { if (arrayEql(b.permissions, add.permissions)) { b.principalLinks = _.concat((_a = b.principalLinks) !== null && _a !== void 0 ? _a : [], add.principalLinks); perfectMatch = true; } res.push(b); } if (!perfectMatch) { res.push(add); } return res; } exports.addPermissions = addPermissions; function removePermissions(current, rem) { const res = []; // stuff that has to be undone const undo = new Map(); function add(perm, principal) { let res = undo.get(perm); if (!res) { res = new Set(); undo.set(perm, res); } res.add(principal); } for (let b of current !== null && current !== void 0 ? current : []) { if (arrayEql(b.permissions, rem.permissions)) { // perfect match b.principalLinks = b.principalLinks.filter((x) => !rem.principalLinks.includes(x)); } else { for (let p of rem.permissions) { if (!b.permissions.includes(p)) { // that binding does not define p continue; } let affectedUsers = []; for (let user of rem.principalLinks) { if (b.principalLinks.includes(user)) { b.principalLinks = b.principalLinks.filter((x) => x != user); affectedUsers.push(user); } } for (let restore of b.permissions) { if (restore == p) { continue; } affectedUsers.forEach((u) => add(restore, u)); } } } if (b.principalLinks.length != 0) { res.push(b); } } for (let e of undo.entries()) { res.push({ permissions: [e[0]], principalLinks: Array.from(e[1]), }); } return res; } exports.removePermissions = removePermissions; function arrayEql(a, b) { return _.isEqual(new Set(a), new Set(b)); } //# sourceMappingURL=bindings.js.map