UNPKG

@63pokupki/nodejs-common

Version:
234 lines 8.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserSys = void 0; const GroupI_1 = require("../Interfaces/GroupI"); /** * Класс который глобально знает все данные пользователя */ class UserSys { constructor(ctx) { this.idUser = 0; // ID пользователя this.ctx = ctx; this.errorSys = ctx.sys.errorSys; this.ixUserGroups = {}; /* вылавливаем apikey */ this.apikey = ctx.apikey; if (!this.apikey) { this.apikey = ''; this.errorSys.devWarning('apikey', 'apikey - пустой'); } } /** * Инициализация данных пользователя * только если this.isAuth() == true * * @return void */ init(param) { var _a; let ok = this.errorSys.isOk(); // По умолчанию true // Проверяем apikey let ifAuth = false; if (param === null || param === void 0 ? void 0 : param.vUser) { ifAuth = true; this.idUser = param.vUser.user_id; } if (ifAuth) { // Ставим в общий слой видимости флаг авторизации this.ctx.sys.bAuth = true; } if (ok && ifAuth) { // Получаем информацию о пользователе по apikey this.vUserInfo = param.vUser; } if (ok && ifAuth && (param === null || param === void 0 ? void 0 : param.aGroup)) { // Проиндексировать группы по: имени группы for (let i = 0; i < param.aGroup.length; i++) { const vGroup = param.aGroup[i]; this.ixUserGroups[vGroup.alias] = vGroup.group_id; } } if (ok && ifAuth) { this.ixRole = param.ixRole; this.ixOrgRole = param.ixOrgRole; this.ixRoleRoute = param.ixRoleRoute; this.ixOrgRoleRoute = param.ixOrgRoleRoute; } if (ok && ifAuth) { // Уведомление об успешной авторизации пользователя в DEV режиме this.errorSys.devNotice('is_user_init', `Авторизация прошла успешно, пользователь - ${(_a = this.vUserInfo) === null || _a === void 0 ? void 0 : _a.username}`); } else { this.errorSys.devWarning('is_user_init', 'Авторизация провалилась'); } } // ================================================== // Проверки без выброса ошибок // ================================================== /** * Проверка является ли пользователь организатором */ isOrg() { return !!this.ixUserGroups[GroupI_1.GroupT.organizers]; } /** * Проверка является ли пользователь администратором организаторов на пр Ольга Проданова */ isOrgAdmin() { return this.isAdmin(); } /** * Проверка является ли пользователь администратором */ isAdmin() { return !!this.ixUserGroups[GroupI_1.GroupT.administrators]; } /** * Проверка является ли пользователь модератором */ isModerator() { return !!this.ixUserGroups[GroupI_1.GroupT.global_moderators]; } /** * Проверка имеет ли пользователь доступ к ПВЗ */ isPvzUser() { return !!this.ixUserGroups[GroupI_1.GroupT.pvz_users]; } /** * Проверка является ли пользователь модератором ПВЗ */ isPvzModerator() { return !!this.ixUserGroups[GroupI_1.GroupT.pvz_moderators]; } /** * Проверка является ли пользователь авторизированным */ isAuth() { return !!this.idUser; } // ================================================== // Геттеры // ================================================== /** * возвращает apikey */ fGetApikey() { return this.apikey; } /** * Получить ID пользователя */ getIdUser() { return this.idUser; } /** * Получить рейтинг пользователя */ getUserRating() { let iUserRating = -1; if (this.vUserInfo) { iUserRating = this.vUserInfo.consumer_rating; } const isModerator = this.isModerator(); const isAdmin = this.isAdmin(); const isSecretClub = this.isUserInGroup(GroupI_1.GroupT.secret_club); if (isModerator || isAdmin || isSecretClub) { iUserRating = 3; } return iUserRating; } /** * Получить инфу о пользователе */ getUserInfo() { return this.vUserInfo; } /** * Список ID групп в которых состоит пользователь * @todo вырезать из абстрактного класса UserSys */ getUserGroupIds() { return !this.ixUserGroups ? [] : Object.values(this.ixUserGroups); } /** * Проверяет состоит ли пользователь в группе * @param groupAlias Алиас группы на принадлежность к которой нужно проверить пользователя */ isUserInGroup(groupAlias) { return !this.ixUserGroups ? false : !!this.ixUserGroups[groupAlias]; } /** * Получить глобальные роли пользователя * @todo вырезать из абстрактного класса UserSys */ getIxRole() { return this.ixRole; } /** * Получить роли пользователя в организациях * @todo вырезать из абстрактного класса UserSys */ getIxOrgRole() { return this.ixOrgRole; } /** * Получить роуты, доступные по глобальным ролям * @todo вырезать из абстрактного класса UserSys */ getIxRoleRoute() { return this.ixRoleRoute; } /** * Получить роуты, доступные по ролям в организациях * @todo вырезать из абстрактного класса UserSys */ getIxOrgRoleRoute() { return this.ixOrgRoleRoute; } // ===================== Новая ролевая модель ================================ /** * Проверить, есть ли у пользователя конкретная роль */ isRole(role) { var _a; return Boolean((_a = this.ixRole) === null || _a === void 0 ? void 0 : _a[role]); } /** * Проверить, есть ли у пользователя роль в конкретной или любой организаци */ isRoleInOrganization(role, idOrg) { var _a, _b; return !!((_b = (_a = this.ixOrgRole) === null || _a === void 0 ? void 0 : _a[idOrg]) === null || _b === void 0 ? void 0 : _b[role]); } /** * Проверить, если доступ к роуту по глобальной роли */ isAccessByRole() { var _a; const route = this.ctx.req.url; return !!((_a = this.ixRoleRoute) === null || _a === void 0 ? void 0 : _a[route]); } /** * Проверить, если доступ к роуту по орг роли */ isAccessByOrgRole(idOrg) { var _a, _b; const route = this.ctx.req.url; return (_b = (_a = this.ixOrgRoleRoute) === null || _a === void 0 ? void 0 : _a[idOrg]) === null || _b === void 0 ? void 0 : _b[route]; } /** * Получить IDs организаций, в которых доступен данный роут */ getAvailableOrganizationId() { var _a, _b; const route = this.ctx.req.url; const aidOrganization = Object.keys(this.ixOrgRoleRoute); const aidAccessOrganization = []; for (let i = 0; i < aidOrganization.length; i++) { const idOrg = Number(aidOrganization[i]); if ((_b = (_a = this.ixOrgRoleRoute) === null || _a === void 0 ? void 0 : _a[idOrg]) === null || _b === void 0 ? void 0 : _b[route]) { aidAccessOrganization.push(idOrg); } } return aidAccessOrganization; } } exports.UserSys = UserSys; //# sourceMappingURL=UserSys.js.map