@63pokupki/nodejs-common
Version:
Common nodejs functionality
207 lines • 8 kB
JavaScript
"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