UNPKG

@63pokupki/nodejs-common

Version:
207 lines 8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AccessSys = void 0; const lodash_1 = __importDefault(require("lodash")); const JwtH_1 = require("../Helpers/JwtH"); const CryptoH_1 = require("../Helpers/CryptoH"); /** */ class AccessSys { /** */ constructor(ctx) { this.ctx = ctx; this.errorSys = ctx.sys.errorSys; this.userSys = ctx.sys.userSys; } // ======================================== // Проверки с выбросом ошибок // ======================================== /** * Доступ только для группы администаторы */ isAdmin() { if (!this.userSys.isAdmin()) { throw this.errorSys.throwAccess('Вы не администратор'); } else { this.errorSys.devNotice('is_admin', 'Вы администратор'); } } /** * Доступ только для группы организаторы */ isOrg() { if (!this.userSys.isOrg()) { throw this.errorSys.throwAccess('Вы не организатор'); } else { this.errorSys.devNotice('is_org', 'Вы организатор'); } } /** * Доступ только для группы администаторы организаторов */ isOrgAdmin() { if (!this.userSys.isOrgAdmin()) { throw this.errorSys.throwAccess('Вы не администратор организаторов'); } else { this.errorSys.devNotice('is_org_admin', 'Вы администратор организаторов'); } } /** * Доступ только для группы модераторы */ isModerator() { if (!this.userSys.isModerator()) { throw this.errorSys.throwAccess('Вы не модератор'); } else { this.errorSys.devNotice('is_moderator', 'Вы модератор'); } } /** * Доступ только для группы пвз пользователи */ isPvzUser() { if (!this.userSys.isPvzUser()) { throw this.errorSys.throwAccess('Вы не пользователь ПВЗ'); } else { this.errorSys.devNotice('is_pvz_user', 'Вы пользователь ПВЗ'); } } /** * Доступ только для группы ПВЗ модераторы */ isPvzModerator() { if (!this.userSys.isPvzModerator()) { throw this.errorSys.throwAccess('Вы не модератор ПВЗ'); } else { this.errorSys.devNotice('is_pvz_moderator', 'Вы модератор ПВЗ'); } } /** * Доступ только для авторизованных пользователей */ isAuth() { if (!this.userSys.isAuth()) { throw this.errorSys.throwAccess('Вы не авторизованы'); } else { this.errorSys.devNotice('is_auth', 'Вы авторизованы'); } } /** * Доступ к роуту по роли */ accessByRole() { if (this.userSys.isAccessByRole()) { this.errorSys.devNotice('access_by_role', 'Доступ к роуту по глобальной роли'); } else { throw this.errorSys.throwAccess('У вас нет доступа к данному роуту по роли на сайте'); } } /** * Доступ к роуту по роли в организации */ accessByOrgRole(idOrg) { if (this.userSys.isAccessByOrgRole(idOrg)) { this.errorSys.devNotice('access_by_orgrole', 'Доступ к роуту по роли в организации'); } else { throw this.errorSys.throwAccess('У вас нет доступа к данному роуту по роли в организации'); } } /** * Доступ к роуту по глобальной или роли в организации */ accessByAnyRole(idOrg) { const route = this.ctx.req.url; const accessByRole = this.userSys.isAccessByRole(); let accessByOrgRole = this.userSys.isAccessByOrgRole(idOrg); if (accessByRole) { this.errorSys.devNotice('access_by_role', 'Доступ к роуту по глобальной роли'); } if (accessByOrgRole) { this.errorSys.devNotice('access_by_orgrole', 'Доступ к роуту по роли в организации'); } if (!accessByRole && !accessByOrgRole) { throw this.errorSys.throwAccess('У вас нет доступа к данному роуту по глобальной/орг роли'); } } /** * проверка доступа к контроллеру по группе */ accessCtrl(ctrlName) { var _a; if (!((_a = this.ixCtrl) === null || _a === void 0 ? void 0 : _a[ctrlName])) { throw this.errorSys.throwAccess('У вас нет доступа к данному контроллеру'); } } /** * Проверка доступа к роуту по правам */ accessByRouteGroup(...avGroup) { const ixRoleRoute = this.userSys.getIxRoleRoute(); const sRoute = this.ctx.req.url; let bOk = false; for (const vGroup of avGroup) { if (ixRoleRoute[vGroup.sRouteGroup] && vGroup.ixRoute[sRoute]) { bOk = true; break; } } if (!bOk) { throw this.errorSys.throwAccessEx('access_failed', 'Доступ запрещен'); } } /** * Проверка межсерверного запроса */ accessSrv() { var _a; let bOk = true; if (!this.ctx.sys.srvkey || ((_a = this.ctx.sys.srvkey) === null || _a === void 0 ? void 0 : _a.length) > 10000) { // Проверка наличия серверного ключа bOk = false; } if (bOk) { // Проверить IP bOk = this.ctx.srv.ipPool.includes(this.ctx.req.socket.remoteAddress); } let asSrvKeyInput = []; if (bOk && this.ctx.sys.srvkey) { try { asSrvKeyInput = (0, JwtH_1.mJwtDecode)({ jwt: (0, CryptoH_1.mDecrypt)(this.ctx.srv.cry.algorithm, this.ctx.srv.cry.key, this.ctx.sys.srvkey), algorithm: this.ctx.srv.jwt.algorithm, secret: this.ctx.srv.jwt.jwtKey }); } catch (e) { bOk = false; console.log('!!!ERROR!!!>>>', 'Не удалась расшифровать srvkey - ', this.ctx.req.socket.remoteAddress); } } if (bOk) { // проверяем ключи const asKeyValid = lodash_1.default.intersection(this.ctx.srv.keyPool, asSrvKeyInput); if (!asKeyValid || (asKeyValid === null || asKeyValid === void 0 ? void 0 : asKeyValid.length) < 5) { bOk = false; } } this.ctx.sys.bSrv = false; // Проверка сервера if (bOk) { this.ctx.sys.bSrv = true; this.ctx.sys.errorSys.devNotice('cross_srv', 'Межсерверный запрос'); } else { this.ctx.sys.errorSys.error('cross_srv', 'Ошибка межсерверного запроса'); } return bOk; } } exports.AccessSys = AccessSys; //# sourceMappingURL=AccessSys.js.map