feat: новая функция

This commit is contained in:
2025-10-13 22:41:49 +03:00
parent 34666b44d8
commit 0e028bc722
83 changed files with 1595 additions and 6093 deletions

View File

@@ -12,69 +12,77 @@
import { computed } from 'vue';
import { useAuthContext } from './useAuth';
import { PERMISSIONS, ROLES, hasPermission as checkPermission, getRoleDescription } from '/app/shared/permissions';
/**
* Composable для работы с правами доступа
* Использует единую матрицу прав из shared/permissions.js
* @returns {Object} - Объект с функциями для проверки прав доступа
*/
export function usePermissions() {
const { userAccessLevel, isAdmin } = useAuthContext();
const { userAccessLevel, isAuthenticated } = useAuthContext();
/**
* Проверяет, может ли пользователь только читать данные
* Текущая роль пользователя
*/
const canRead = computed(() => {
return (userAccessLevel.value && userAccessLevel.value.hasAccess) || isAdmin.value;
const currentRole = computed(() => {
if (!isAuthenticated.value) {
return ROLES.GUEST; // Неавторизованный
}
// Если userAccessLevel не определен, возвращаем USER (авторизованный пользователь)
return userAccessLevel.value?.level || ROLES.USER;
});
/**
* Проверяет, может ли пользователь редактировать данные
*/
const canEdit = computed(() => {
return userAccessLevel.value && userAccessLevel.value.level === 'editor';
});
/**
* Проверяет, может ли пользователь удалять данные
*/
const canDelete = computed(() => {
return userAccessLevel.value && userAccessLevel.value.level === 'editor';
});
/**
* Проверяет, может ли пользователь управлять настройками системы
*/
const canManageSettings = computed(() => {
return userAccessLevel.value && userAccessLevel.value.level === 'editor';
});
/**
* Получает текущий уровень доступа
*/
const currentLevel = computed(() => {
return userAccessLevel.value ? userAccessLevel.value.level : 'user';
});
/**
* Получает количество токенов пользователя
* Количество токенов пользователя
*/
const tokenCount = computed(() => {
return userAccessLevel.value ? userAccessLevel.value.tokenCount : 0;
return userAccessLevel.value?.tokenCount || 0;
});
/**
* Универсальная проверка любого права
* @param {string} permission - Право для проверки
* @returns {boolean}
*/
const hasPermission = (permission) => {
return checkPermission(currentRole.value, permission);
};
// ========================================================================
// Computed проверки для частого использования
// ========================================================================
// Просмотр данных
const canViewData = computed(() => hasPermission(PERMISSIONS.VIEW_DATA));
const canViewContacts = computed(() => hasPermission(PERMISSIONS.VIEW_CONTACTS));
const canViewCrm = computed(() => hasPermission(PERMISSIONS.VIEW_CRM));
// Редактирование и удаление
const canEditData = computed(() => hasPermission(PERMISSIONS.EDIT_USER_DATA));
const canEditContacts = computed(() => hasPermission(PERMISSIONS.EDIT_CONTACTS));
const canDeleteData = computed(() => hasPermission(PERMISSIONS.DELETE_USER_DATA));
const canDeleteMessages = computed(() => hasPermission(PERMISSIONS.DELETE_MESSAGES));
// Коммуникация
const canSendToUsers = computed(() => hasPermission(PERMISSIONS.SEND_TO_USERS));
const canChatWithAdmins = computed(() => hasPermission(PERMISSIONS.CHAT_WITH_ADMINS));
const canGenerateAI = computed(() => hasPermission(PERMISSIONS.GENERATE_AI_REPLIES));
const canBroadcast = computed(() => hasPermission(PERMISSIONS.BROADCAST));
// Управление
const canManageTags = computed(() => hasPermission(PERMISSIONS.MANAGE_TAGS));
const canBlockUsers = computed(() => hasPermission(PERMISSIONS.BLOCK_USERS));
const canManageSettings = computed(() => hasPermission(PERMISSIONS.MANAGE_SETTINGS));
const currentLevel = computed(() => currentRole.value);
/**
* Получает описание текущего уровня доступа
*/
const getLevelDescription = (level) => {
switch (level) {
case 'readonly':
return 'Только чтение';
case 'editor':
return 'Редактор';
case 'user':
default:
return 'Пользователь';
}
return getRoleDescription(level);
};
/**
@@ -82,24 +90,56 @@ export function usePermissions() {
*/
const getLevelClass = (level) => {
switch (level) {
case 'readonly':
case ROLES.READONLY:
return 'access-readonly';
case 'editor':
case ROLES.EDITOR:
return 'access-editor';
case 'user':
case ROLES.USER:
return 'access-user';
case ROLES.GUEST:
return 'access-guest';
default:
return 'access-user';
}
};
return {
canRead,
canEdit,
canDelete,
canManageSettings,
currentLevel,
// Главная функция
hasPermission,
// Информация о роли
currentRole,
currentLevel, // alias для совместимости
tokenCount,
// Просмотр
canViewData,
canViewContacts,
canViewCrm,
// Редактирование
canEditData,
canEditContacts,
canDeleteData,
canDeleteMessages,
// Коммуникация
canSendToUsers,
canChatWithAdmins,
canGenerateAI,
canBroadcast,
// Управление
canManageTags,
canBlockUsers,
canManageSettings,
// Утилиты
getLevelDescription,
getLevelClass
getLevelClass,
// Константы
ROLES,
PERMISSIONS
};
}