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