UNPKG

@intuitionrobotics/permissions

Version:
140 lines • 6.7 kB
"use strict"; 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PermissionsModule = exports.PermissionsModule_Class = void 0; const ts_common_1 = require("@intuitionrobotics/ts-common"); const permissions_assert_1 = require("./permissions-assert"); const managment_1 = require("./db-types/managment"); const assign_1 = require("./db-types/assign"); const backend_1 = require("@intuitionrobotics/user-account/backend"); class PermissionsModule_Class extends ts_common_1.Module { constructor() { super("PermissionsModule"); this.getProjectIdentity = () => this.config.project; } init() { if (!this.config) throw new ts_common_1.ImplementationMissingException("MUST set config with project identity!!"); } getUserUrlsPermissions(projectId, urlsMap, userId, requestCustomField) { return __awaiter(this, void 0, void 0, function* () { const urls = Object.keys(urlsMap); const [userDetails, apiDetails] = yield Promise.all([ permissions_assert_1.PermissionsAssert.getUserDetails(userId), permissions_assert_1.PermissionsAssert.getApisDetails(urls, projectId) ]); return urls.reduce((userUrlsPermissions, url, i) => { const apiDetail = apiDetails[i]; if (apiDetail) { try { permissions_assert_1.PermissionsAssert._assertUserPermissionsImpl(apiDetail, projectId, userDetails, requestCustomField); userUrlsPermissions[url] = true; } catch (e) { userUrlsPermissions[url] = false; } } else userUrlsPermissions[url] = false; return userUrlsPermissions; }, {}); }); } getUsersCFsByShareGroups(usersEmails, groupsIds) { return __awaiter(this, void 0, void 0, function* () { const accounts = yield backend_1.AccountModule.getUsers(usersEmails); const usersMap = (0, ts_common_1.arrayToMap)(accounts, u => u.email); const permissionUsers = yield (0, ts_common_1.batchActionParallel)(accounts.map(u => u._id), 10, (batchedAccountIds) => __awaiter(this, void 0, void 0, function* () { return assign_1.UserPermissionsDB.query({ where: { accountId: { $in: batchedAccountIds } }, select: ['groups', 'accountId'] }); })); const permissionUsersMap = (0, ts_common_1.arrayToMap)(permissionUsers, pu => pu.accountId); return usersEmails.reduce((acc, e) => { const account = usersMap[e.toLowerCase()]; if (!account) return acc; const user = permissionUsersMap[account._id]; if (!user) return acc; acc[e] = this.getCustomFields(user, groupsIds); return acc; }, {}); }); } getUserCFsByShareGroups(userId, groupsIds) { return __awaiter(this, void 0, void 0, function* () { const user = yield assign_1.UserPermissionsDB.queryUnique({ accountId: userId }); return this.getCustomFields(user, groupsIds); }); } getCustomFields(user, groupsIds) { if (!user.groups) return []; return user.groups.reduce((acc, userGroup) => { if (!groupsIds.find(groupId => groupId === userGroup.groupId)) return acc; if (!userGroup.customField) return acc; acc.push(userGroup.customField); return acc; }, []); } registerProject(routes) { return __awaiter(this, void 0, void 0, function* () { const projectRoutes = { project: exports.PermissionsModule.getProjectIdentity(), routes, predefinedGroups: this.config.predefinedGroups, predefinedUser: this.config.predefinedUser }; return this._registerProject(projectRoutes); }); } _registerProject(registerProject) { return __awaiter(this, void 0, void 0, function* () { const project = registerProject.project; yield managment_1.ProjectPermissionsDB.upsert(project); yield managment_1.ApiPermissionsDB.registerApis(project._id, registerProject.routes); const predefinedGroups = registerProject.predefinedGroups; if (!predefinedGroups || predefinedGroups.length === 0) return; yield assign_1.GroupPermissionsDB.upsertPredefinedGroups(project._id, project.name, predefinedGroups); const predefinedUser = registerProject.predefinedUser; if (!predefinedUser) return; const groupsUser = predefinedUser.groups.map(groupItem => { const customField = {}; const allRegEx = ".*"; if (!groupItem.customKeys || !groupItem.customKeys.length) customField["_id"] = allRegEx; else { groupItem.customKeys.forEach((customKey) => { customField[customKey] = allRegEx; }); } return { groupId: assign_1.GroupPermissionsDB.getPredefinedGroupId(project._id, groupItem._id), customField }; }); yield assign_1.UserPermissionsDB.upsert(Object.assign(Object.assign({}, predefinedUser), { groups: groupsUser })); }); } } exports.PermissionsModule_Class = PermissionsModule_Class; exports.PermissionsModule = new PermissionsModule_Class(); //# sourceMappingURL=PermissionsModule.js.map