@controlplane/cli
Version:
Control Plane Corporation CLI
76 lines • 2.5 kB
JavaScript
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
;