UNPKG

@openinc/parse-server-opendash

Version:
92 lines (91 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; const config_1 = require("../features/config"); const types_1 = require("../types"); async function init(name) { Parse.Cloud.define(name, async (request) => { const userId = request.user?.id; let roles = []; if (request.user) { // TODO, search roles recursivly const roleObjects = await new Parse.Query(Parse.Role) .equalTo("users", request.user) .find({ useMasterKey: true }); roles = roleObjects.map((role) => role.getName()); } const parseSchema = await Parse.Schema.all(); const schema = parseSchema .map((s) => { const clp = s.classLevelPermissions; return { className: s.className, fields: s.fields, evaluatedClassLevelPermissions: { find: evaluateClassLevelPermission(userId, roles, clp?.find), count: evaluateClassLevelPermission(userId, roles, clp?.count), get: evaluateClassLevelPermission(userId, roles, clp?.get), create: evaluateClassLevelPermission(userId, roles, clp?.create), update: evaluateClassLevelPermission(userId, roles, clp?.update), delete: evaluateClassLevelPermission(userId, roles, clp?.delete), }, }; }) .filter((s) => { const p = s.evaluatedClassLevelPermissions; return Object.values(p).some(Boolean); }); return { userId, roles, schema, config: config_1.ConfigInstance.getInstance().export(), tenants: await getTenants(), }; }); } async function getTenants() { try { const tenants = await new Parse.Query(types_1.Tenant) .ascending("label") .limit(1000000) .find({ useMasterKey: true }); return tenants.map((tenant) => { return { key: tenant.id, value: tenant.id, label: tenant.label || "", description: tenant.description || "", public: tenant.public || false, icon: tenant.icon?.url() || null, logo: tenant.logo?.url() || null, imprintUrl: tenant.imprintUrl || "", dataProtectionUrl: tenant.dataProtectionUrl || "", }; }); } catch (error) { console.error(error); return []; } } function evaluateClassLevelPermission(userId, roles, permissions) { if (!permissions) { return false; } if (permissions["*"]) { return true; } if (userId && permissions.requiresAuthentication) { return true; } if (userId && permissions[userId]) { return true; } for (const role of roles) { if (permissions[`role:${role}`]) { return true; } } return false; }