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:
@@ -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 ? (
|
||||
|
||||
+1
-1
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user