From 7fc7d4297ec168fef5205e5af08ee348fcd49717 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Fri, 11 Oct 2024 10:56:00 +0200 Subject: [PATCH] Align target access on UI with backend (#5664) Co-authored-by: github-actions[bot] --- .../schema/providers/schema-manager.ts | 2 +- .../web/app/src/components/layouts/target.tsx | 20 ++++++++--- .../target/settings/cdn-access-tokens.tsx | 32 +++++++++-------- .../web/app/src/pages/target-settings.tsx | 35 +++++++++++++------ .../docs/management/sso-oidc-provider.mdx | 5 ++- 5 files changed, 61 insertions(+), 33 deletions(-) diff --git a/packages/services/api/src/modules/schema/providers/schema-manager.ts b/packages/services/api/src/modules/schema/providers/schema-manager.ts index 046517ad7b..8169a17e3f 100644 --- a/packages/services/api/src/modules/schema/providers/schema-manager.ts +++ b/packages/services/api/src/modules/schema/providers/schema-manager.ts @@ -588,7 +588,7 @@ export class SchemaManager { this.logger.debug('Updating base schema (selector=%o)', selector); await this.authManager.ensureTargetAccess({ ...selector, - scope: TargetAccessScope.REGISTRY_READ, + scope: TargetAccessScope.REGISTRY_WRITE, }); await this.storage.updateBaseSchema(selector, newBaseSchema); } diff --git a/packages/web/app/src/components/layouts/target.tsx b/packages/web/app/src/components/layouts/target.tsx index 127ac3664f..ae02795893 100644 --- a/packages/web/app/src/components/layouts/target.tsx +++ b/packages/web/app/src/components/layouts/target.tsx @@ -128,14 +128,26 @@ export const TargetLayout = ({ useLastVisitedOrganizationWriter(currentOrganization?.cleanId); - const canAccessSchema = canAccessTarget( + const hasRegistryReadAccess = canAccessTarget( TargetAccessScope.RegistryRead, currentOrganization?.me ?? null, ); - const canAccessSettings = canAccessTarget( + const hasReadAccess = canAccessTarget(TargetAccessScope.Read, currentOrganization?.me ?? null); + const hasSettingsAccess = canAccessTarget( TargetAccessScope.Settings, currentOrganization?.me ?? null, ); + const hasRegistryWriteAccess = canAccessTarget( + TargetAccessScope.RegistryWrite, + currentOrganization?.me ?? null, + ); + const hasTokensWriteAccess = canAccessTarget( + TargetAccessScope.TokensWrite, + currentOrganization?.me ?? null, + ); + + const canAccessSettingsPage = + hasReadAccess || hasSettingsAccess || hasRegistryWriteAccess || hasTokensWriteAccess; return ( <> @@ -169,7 +181,7 @@ export const TargetLayout = ({ {currentOrganization && currentProject && currentTarget ? ( - {canAccessSchema && ( + {hasRegistryReadAccess && ( <> )} - {canAccessSettings && ( + {canAccessSettingsPage && ( - + {canManage ? ( + + ) : null} ); diff --git a/packages/web/app/src/pages/target-settings.tsx b/packages/web/app/src/pages/target-settings.tsx index 05fedb82aa..ac9637acc1 100644 --- a/packages/web/app/src/pages/target-settings.tsx +++ b/packages/web/app/src/pages/target-settings.tsx @@ -1136,11 +1136,26 @@ function TargetSettingsContent(props: { const targetForSettings = useFragment(TargetSettingsPage_TargetFragment, currentTarget); - const canAccessTokens = canAccessTarget( - TargetAccessScope.TokensRead, + const hasTokensWriteAccess = canAccessTarget( + TargetAccessScope.TokensWrite, + organizationForSettings?.me ?? null, + ); + const hasReadAccess = canAccessTarget( + TargetAccessScope.Read, + organizationForSettings?.me ?? null, + ); + const hasDeleteAccess = canAccessTarget( + TargetAccessScope.Delete, + organizationForSettings?.me ?? null, + ); + const hasSettingsAccess = canAccessTarget( + TargetAccessScope.Settings, + organizationForSettings?.me ?? null, + ); + const hasRegistryWriteAccess = canAccessTarget( + TargetAccessScope.RegistryWrite, organizationForSettings?.me ?? null, ); - const canDelete = canAccessTarget(TargetAccessScope.Delete, organizationForSettings?.me ?? null); if (query.error) { return ; @@ -1189,7 +1204,7 @@ function TargetSettingsContent(props: { {currentOrganization && currentProject && currentTarget && organizationForSettings ? (
- {props.page === 'general' ? ( + {props.page === 'general' && hasSettingsAccess ? ( <> - {canDelete && ( + {hasDeleteAccess && ( ) : null} - {props.page === 'cdn' && canAccessTokens ? ( + {props.page === 'cdn' && hasReadAccess ? ( ) : null} - {props.page === 'registry-token' && canAccessTokens ? ( + {props.page === 'registry-token' && hasTokensWriteAccess ? ( ) : null} - {props.page === 'breaking-changes' ? ( + {props.page === 'breaking-changes' && hasSettingsAccess ? ( ) : null} - {props.page === 'base-schema' ? ( + {props.page === 'base-schema' && hasRegistryWriteAccess ? ( ) : null} - {props.page === 'schema-contracts' ? ( + {props.page === 'schema-contracts' && hasSettingsAccess ? (