@intuitionrobotics/permissions
Version:
140 lines • 6.7 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());
});
};
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