/** * Copyright (c) 2024-2025 Тарабанов Александр Викторович * All rights reserved. * * This software is proprietary and confidential. * Unauthorized copying, modification, or distribution is prohibited. * * For licensing inquiries: info@hb3-accelerator.com * Website: https://hb3-accelerator.com * GitHub: https://github.com/HB3-ACCELERATOR */ const logger = require('../utils/logger'); /** * Сервис логики для админских функций * Определяет права доступа, приоритеты и логику работы с админами */ /** * Определить, нужно ли генерировать AI ответ * @param {Object} params - Параметры * @param {string} params.senderType - Тип отправителя (user/admin) * @param {number} params.userId - ID пользователя * @param {number} params.recipientId - ID получателя * @param {string} params.channel - Канал (web/telegram/email) * @returns {boolean} */ function shouldGenerateAiReply(params) { const { senderType, userId, recipientId } = params; // Обычные пользователи всегда получают AI ответ if (senderType !== 'admin') { return true; } // Админ, пишущий себе, получает AI ответ if (userId === recipientId) { return true; } // Админ, пишущий другому пользователю, не получает AI ответ // (это личное сообщение от админа) return false; } /** * Проверить, может ли пользователь писать в беседу * @param {Object} params - Параметры * @param {boolean} params.isAdmin - Является ли админом * @param {number} params.userId - ID пользователя * @param {number} params.conversationUserId - ID владельца беседы * @returns {boolean} */ function canWriteToConversation(params) { const { isAdmin, userId, conversationUserId } = params; // Админ может писать в любую беседу if (isAdmin) { return true; } // Обычный пользователь может писать только в свою беседу return userId === conversationUserId; } /** * Проверить, может ли пользователь выполнить админское действие * @param {Object} params - Параметры * @param {string} params.role - Роль пользователя ('editor', 'readonly', 'user') * @param {string} params.action - Название действия * @returns {boolean} */ function canPerformAdminAction(params) { const { role, action } = params; // Обычный пользователь не может выполнять админские действия if (role === 'user') { return false; } // Список действий только для editor (с правами редактирования) const editorOnlyActions = [ 'delete_message_history', 'manage_users', 'manage_ai_settings', 'broadcast_message', // ← Массовая рассылка только для editor! 'delete_user', 'modify_user_settings' ]; // Список действий для readonly (только просмотр и личные чаты) const readonlyActions = [ 'view_all_conversations', // Просмотр всех бесед 'create_admin_chat', // Создание приватных чатов между админами 'view_admin_chat' // Просмотр приватных чатов ]; // readonly может только просматривать и общаться if (role === 'readonly') { return readonlyActions.includes(action); } // editor может все (и свои действия, и readonly действия) if (role === 'editor') { return editorOnlyActions.includes(action) || readonlyActions.includes(action); } return false; } /** * Получить настройки админа с учетом роли * @param {Object} params - Параметры * @param {string} params.role - Роль пользователя ('editor', 'readonly', 'user') * @returns {Object} Настройки прав доступа */ function getAdminSettings(params) { const { role } = params; // Editor - полные права if (role === 'editor') { return { role: 'editor', roleDisplay: 'Редактор', canWriteToAnyConversation: true, canViewAllConversations: true, canManageUsers: true, canManageAISettings: true, canBroadcast: true, canDeleteUsers: true, canModifySettings: true, canCreateAdminChat: true }; } // Readonly - только просмотр и общение if (role === 'readonly') { return { role: 'readonly', roleDisplay: 'Только чтение', canWriteToAnyConversation: false, // Только в свои беседы canViewAllConversations: true, // Может просматривать все canManageUsers: false, canManageAISettings: false, canBroadcast: false, canDeleteUsers: false, canModifySettings: false, canCreateAdminChat: true // Может создавать приватные чаты с админами }; } // User - минимальные права return { role: 'user', roleDisplay: 'Пользователь', canWriteToAnyConversation: false, canViewAllConversations: false, canManageUsers: false, canManageAISettings: false, canBroadcast: false, canDeleteUsers: false, canModifySettings: false, canCreateAdminChat: false }; } module.exports = { shouldGenerateAiReply, canWriteToConversation, canPerformAdminAction, getAdminSettings };