@openinc/parse-server-opendash
Version:
Parse Server Cloud Code for open.INC Stack.
76 lines (75 loc) • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.init = init;
const __1 = require("..");
const types_1 = require("../types");
async function init() {
(0, __1.beforeSaveHook)(types_1.Tenant, async (request) => {
const { object, original, user } = request;
await (0, __1.defaultHandler)(request);
await (0, __1.immutableField)(request, "tagPrefix", "opendash:tenant:change-tag-prefix");
if (object.id) {
object.setACL(new Parse.ACL({
[`role:od-tenant-user-${object.id}`]: {
read: true,
},
[`role:od-tenant-admin-${object.id}`]: {
read: true,
write: true,
},
[`role:od-admin`]: {
read: true,
write: true,
},
}));
// Handle default tag prefix
if (request.context.beforeSaveAfterCreation) {
if (!object.get("tagPrefix"))
object.set("tagPrefix", `tenant-${object.id}-`);
}
// Handle Data Source
const rootSource = await new Parse.Query(types_1.Source)
.equalTo("tag", "tenant-root-source")
.first({ useMasterKey: true });
const sourceACL = new Parse.ACL({
[`role:od-tenant-user-${object.id}`]: {
read: true,
},
});
let dataSource = object.get("dataSource");
if (!dataSource) {
dataSource = new types_1.Source();
}
dataSource.setACL(sourceACL);
if (rootSource) {
dataSource.set("parent", rootSource);
}
dataSource.set("name", object.get("label"));
dataSource.set("tag", `tenant-data-${object.id}`);
await dataSource.save(null, { useMasterKey: true });
object.set("dataSource", dataSource);
}
});
(0, __1.afterSaveHook)(types_1.Tenant, async ({ object, original, user }) => {
await (0, __1.ensureRole)(`od-tenant-admin-${object.id}`, {
label: `${object.get("label")} (Admin)`,
});
await (0, __1.ensureRole)(`od-tenant-user-${object.id}`, {
label: object.get("label"),
acl: new Parse.ACL({
[`role:od-tenant-user-${object.id}`]: {
read: true,
},
}),
});
if (!original) {
// trigger beforeSave after creation
await object.save(null, {
useMasterKey: true,
context: {
beforeSaveAfterCreation: true,
},
});
}
});
}