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 (