@datocms/cma-client
Version:
JS client for DatoCMS REST Content Management API
83 lines • 4.34 kB
JavaScript
;
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