Pull request #2285: fix(TEAMMSBMOB-22261): define permission by id

Merge in MCB_FE/mcb-platform-monorepo from fix/TEAMMSBMOB-22261-define-permission-by-id to develop

* commit '62c6aab1f65df77857025be8cd8c9a543978517d':
  fix(TEAMMSBMOB-22261): define permission by id
This commit is contained in:
Антон Тараканов
2026-01-20 14:22:35 +03:00
3 changed files with 19 additions and 5 deletions
@@ -3,14 +3,23 @@ import { BUSINESS_CARDS_GET_BY_ID_ENDPOINT } from '@msb/http';
import { rest } from 'msw';
import { BUSINESS_CARDS_GET_BY_ID_MOCK, BUSINESS_CARDS_ERROR } from './mocks';
const isIntegrationError = true;
const isIntegrationError = false;
const isAccessTest = false;
const getBusinessCardByIdHandler = rest.get<never, never, BusinessCardsGetByIdResponseDto>(
BUSINESS_CARDS_GET_BY_ID_ENDPOINT,
async (req, res, ctx) => {
const clientId = req.url.searchParams.get('clientId');
let result = BUSINESS_CARDS_GET_BY_ID_MOCK;
if (!clientId) {
// Бэк фактически возвращает без поля "data".
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
return res(ctx.delay(1000), ctx.status(400), ctx.json({}));
}
if (isIntegrationError || isAccessTest) {
// Бэк фактически возвращает без поля "data".
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -1,7 +1,7 @@
/* eslint-disable react/jsx-no-useless-fragment */
import { useMemo } from 'react';
import { useAppContext } from '../../context';
import { checkHavePermission, checkHaveUserPermissions } from '../../lib';
import { checkHavePermission, checkHaveUserPermissions, checkIsPermissionsAvailable } from '../../lib';
import type { PermissionItem } from '../../model';
import { AUTHORITIES_FIELD } from '../../model';
import { NotAuthorizedError } from '../SystemResponse';
@@ -10,21 +10,26 @@ interface PermissionsProps {
permissionsList: PermissionItem[];
children: React.ReactNode;
ymNotAuthorizedGoal?: React.ReactNode;
organizationId?: string;
}
const Permissions = ({ permissionsList, children, ymNotAuthorizedGoal }: PermissionsProps) => {
const Permissions = ({ permissionsList, children, ymNotAuthorizedGoal, organizationId }: PermissionsProps) => {
const { userAuthorities } = useAppContext();
const hasPermissions = useMemo(
() =>
permissionsList.every(({ permissions, authoritiesField, isCheckEvery }) => {
if (organizationId) {
return checkIsPermissionsAvailable(organizationId, userAuthorities?.data.clientAuthorities || {}, permissions, isCheckEvery);
}
if (authoritiesField === AUTHORITIES_FIELD.CLIENT_AUTHORITIES) {
return checkHavePermission(userAuthorities?.data.clientAuthorities || {}, permissions, isCheckEvery);
}
return checkHaveUserPermissions(userAuthorities?.data.authorities, permissions, isCheckEvery);
}),
[permissionsList, userAuthorities]
[organizationId, permissionsList, userAuthorities]
);
return hasPermissions ? (
@@ -96,7 +96,7 @@ const BusinessCardDetailsPage = (): ReactElement | null => {
: [];
return (
<Permissions permissionsList={PERMISSION_CONFIG}>
<Permissions organizationId={clientId} permissionsList={PERMISSION_CONFIG}>
<YaMetrikaReachGoal goalType={YM_GOALS.SCREEN_VIEW} params={BUSINESS_CARD_GOALS.OPEN_REQUISITES} />
<PageLayoutWithSections aside={<S.Aside>{isDesktop && hasPermissions && actions}</S.Aside>} asideInMobile={!isMobile}>
<S.PageWrapper>