From 0ffd88a90e06f3fa12ae3ffc32da9d4ec9bda432 Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Mon, 7 Mar 2022 17:38:17 +0000 Subject: [PATCH] catalog-react: require CatalogEntityPermission in useEntityPermission Now that we have stricter typing for permissions, we can restrict the useEntityPermission hook to only be used with permissions of type `CatalogEntityPermission`. Signed-off-by: Mike Lewis --- .changeset/clever-donuts-teach.md | 5 +++++ plugins/catalog-react/api-report.md | 4 ++-- plugins/catalog-react/package.json | 1 + plugins/catalog-react/src/hooks/useEntityPermission.ts | 6 +++--- 4 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 .changeset/clever-donuts-teach.md diff --git a/.changeset/clever-donuts-teach.md b/.changeset/clever-donuts-teach.md new file mode 100644 index 0000000000..eb828dfa4e --- /dev/null +++ b/.changeset/clever-donuts-teach.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Prevent permissions with types other than `CatalogEntityPermission` from being used with the `useEntityPermission` hook. diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index b90072beba..e25c3c92bd 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -8,6 +8,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { CATALOG_FILTER_EXISTS } from '@backstage/catalog-client'; import { CatalogApi } from '@backstage/catalog-client'; +import { CatalogEntityPermission } from '@backstage/plugin-catalog-common'; import { ComponentEntity } from '@backstage/catalog-model'; import { ComponentProps } from 'react'; import { CompoundEntityRef } from '@backstage/catalog-model'; @@ -16,7 +17,6 @@ import { IconButton } from '@material-ui/core'; import { LinkProps } from '@backstage/core-components'; import { Observable } from '@backstage/types'; import { Overrides } from '@material-ui/core/styles/overrides'; -import { Permission } from '@backstage/plugin-permission-common'; import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; import { ReactNode } from 'react'; @@ -489,7 +489,7 @@ export function useEntityOwnership(): { }; // @alpha -export function useEntityPermission(permission: Permission): { +export function useEntityPermission(permission: CatalogEntityPermission): { loading: boolean; allowed: boolean; error?: Error; diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 336052a88e..62b101d909 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -40,6 +40,7 @@ "@backstage/core-plugin-api": "^1.0.0", "@backstage/errors": "^1.0.0", "@backstage/integration": "^1.0.1-next.0", + "@backstage/plugin-catalog-common": "^1.0.1-next.0", "@backstage/plugin-permission-common": "^0.5.3", "@backstage/plugin-permission-react": "^0.3.4", "@backstage/theme": "^0.2.15", diff --git a/plugins/catalog-react/src/hooks/useEntityPermission.ts b/plugins/catalog-react/src/hooks/useEntityPermission.ts index 55d863726e..bd8f565ecb 100644 --- a/plugins/catalog-react/src/hooks/useEntityPermission.ts +++ b/plugins/catalog-react/src/hooks/useEntityPermission.ts @@ -15,7 +15,7 @@ */ import { stringifyEntityRef } from '@backstage/catalog-model'; -import { Permission } from '@backstage/plugin-permission-common'; +import { CatalogEntityPermission } from '@backstage/plugin-catalog-common'; import { usePermission } from '@backstage/plugin-permission-react'; import { useAsyncEntity } from './useEntity'; @@ -23,14 +23,14 @@ import { useAsyncEntity } from './useEntity'; * A thin wrapper around the * {@link @backstage/plugin-permission-react#usePermission} hook which uses the * current entity in context to make an authorization request for the given - * permission. + * {@link @backstage/plugin-catalog-common#CatalogEntityPermission}. * * Note: this hook blocks the permission request until the entity has loaded in * context. If you have the entityRef and need concurrent requests, use the * `usePermission` hook directly. * @alpha */ -export function useEntityPermission(permission: Permission): { +export function useEntityPermission(permission: CatalogEntityPermission): { loading: boolean; allowed: boolean; error?: Error;