From 2e6e661575c7e01f4c36cada886f8e11406c8d52 Mon Sep 17 00:00:00 2001 From: Veronika Tsygankova Date: Mon, 9 Nov 2026 11:46:09 +0300 Subject: [PATCH 1/5] =?UTF-8?q?[AURORA-1698]=20-=20=D0=A1=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=20=D0=93=D0=A1=D0=9A?= =?UTF-8?q?/=D0=93=D0=A1=D0=97:=20=D0=BF=D1=83=D0=BD=D0=BA=D1=82=20=C2=AB?= =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82=D1=8C=C2=BB=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BD=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=D0=BC=20=D0=B1=D0=B5=D0=B7=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B0=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - добавлена проверка наличия права DIRECTORY_DELETE --- web/src/auth/permissions.ts | 2 ++ .../RelatedGroupTable/RelatedGroupTable.tsx | 17 +++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/web/src/auth/permissions.ts b/web/src/auth/permissions.ts index bc9d72a..e55e99e 100644 --- a/web/src/auth/permissions.ts +++ b/web/src/auth/permissions.ts @@ -2,5 +2,7 @@ // проверки на клиенте только прячут то, что пользователю всё равно не разрешат. export const USERS_ADMIN = 'USERS_ADMIN'; export const DIRECTORY_ADMIN = 'DIRECTORY_ADMIN'; +// Удаление ГСК/ГСЗ +export const DIRECTORY_DELETE = 'DIRECTORY_DELETE'; // Экран «Качество первички» (метрики качества распознавания). export const QUALITY_METRICS_VIEW = 'QUALITY_METRICS_VIEW'; diff --git a/web/src/widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable.tsx b/web/src/widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable.tsx index 1c45a40..fd00658 100644 --- a/web/src/widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable.tsx +++ b/web/src/widgets/RelatedGroup/RelatedGroupTable/RelatedGroupTable.tsx @@ -1,8 +1,10 @@ import { DeleteOutlined, EditOutlined, EllipsisOutlined } from '@ant-design/icons'; -import { Button, Dropdown, Space } from 'antd'; +import { Button, Dropdown, type MenuProps, Space } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { type ReactNode, useMemo, useState } from 'react'; import { ApiError } from '../../../api/client'; +import { useCurrentUser } from '../../../auth/MeContext'; +import { DIRECTORY_DELETE } from '../../../auth/permissions'; import { ColumnSettings, DataTable, useFilteredRows, useVisibleColumns } from '../../../components/GenericTable'; import { useTableFilters } from '../../../components/GenericTable/useTableFilters'; import { deleteRelatedGroup, editRelatedGroup } from '../../../services/api/directories/related-groups'; @@ -23,6 +25,7 @@ interface RelatedGroupTableI { export function RelatedGroupTable({ tabsComponent, data, loading, getData, activeTab }: RelatedGroupTableI) { const notification = useNotificationApi(); + const canDelete = useCurrentUser().permissions.includes(DIRECTORY_DELETE); const [editFormOpen, setEditFormOpen] = useState(false); const [deleteModalOpen, setDeleteModalOpen] = useState(false); @@ -74,7 +77,7 @@ export function RelatedGroupTable({ tabsComponent, data, loading, getData, activ title: '', width: 30, render: (_: unknown, row: RelatedGroupOut) => { - const items = [ + const items: MenuProps['items'] = [ { key: 'edit', icon: , @@ -84,7 +87,9 @@ export function RelatedGroupTable({ tabsComponent, data, loading, getData, activ setEditFormOpen(true); }, }, - { + ]; + if (canDelete) { + items.push({ key: 'delete', icon: , label: 'Удалить', @@ -93,8 +98,8 @@ export function RelatedGroupTable({ tabsComponent, data, loading, getData, activ setGroupId(row.id); setDeleteModalOpen(true); }, - }, - ]; + }); + } return (