Integrate catalog-import with permissions

Signed-off-by: Joon Park <joonp@spotify.com>
This commit is contained in:
Joon Park
2022-01-19 17:06:00 +00:00
parent a28838ac5c
commit ba59832aed
13 changed files with 67 additions and 6 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-common': patch
---
Add catalogEntityCreatePermission
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Permission the Register Existing Component button
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Permission the catalog-import route
+2
View File
@@ -17,6 +17,7 @@
"@backstage/plugin-apache-airflow": "^0.1.5-next.0",
"@backstage/plugin-badges": "^0.2.21-next.0",
"@backstage/plugin-catalog": "^0.7.11-next.0",
"@backstage/plugin-catalog-common": "^0.1.1",
"@backstage/plugin-catalog-graph": "^0.2.9-next.0",
"@backstage/plugin-catalog-import": "^0.8.0-next.0",
"@backstage/plugin-catalog-react": "^0.6.13-next.0",
@@ -38,6 +39,7 @@
"@backstage/plugin-newrelic-dashboard": "^0.1.5-next.0",
"@backstage/plugin-org": "^0.4.1-next.0",
"@backstage/plugin-pagerduty": "0.3.24-next.0",
"@backstage/plugin-permission-react": "^0.3.0",
"@backstage/plugin-rollbar": "^0.3.25-next.0",
"@backstage/plugin-scaffolder": "^0.12.1-next.0",
"@backstage/plugin-search": "^0.6.1-next.0",
+7 -1
View File
@@ -86,6 +86,8 @@ import * as plugins from './plugins';
import { techDocsPage } from './components/techdocs/TechDocsPage';
import { ApacheAirflowPage } from '@backstage/plugin-apache-airflow';
import { PermissionedRoute } from '@backstage/plugin-permission-react';
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';
const app = createApp({
apis,
@@ -140,7 +142,11 @@ const routes = (
>
{entityPage}
</Route>
<Route path="/catalog-import" element={<CatalogImportPage />} />
<PermissionedRoute
path="/catalog-import"
permission={catalogEntityCreatePermission}
element={<CatalogImportPage />}
/>
<Route
path="/catalog-graph"
element={
+4
View File
@@ -49,6 +49,7 @@ import { version as pluginApiDocs } from '../../../../plugins/api-docs/package.j
import { version as pluginAppBackend } from '../../../../plugins/app-backend/package.json';
import { version as pluginAuthBackend } from '../../../../plugins/auth-backend/package.json';
import { version as pluginCatalog } from '../../../../plugins/catalog/package.json';
import { version as pluginCatalogCommon } from '../../../../plugins/catalog-common/package.json';
import { version as pluginCatalogReact } from '../../../../plugins/catalog-react/package.json';
import { version as pluginCatalogBackend } from '../../../../plugins/catalog-backend/package.json';
import { version as pluginCatalogGraph } from '../../../../plugins/catalog-graph/package.json';
@@ -59,6 +60,7 @@ import { version as pluginGithubActions } from '../../../../plugins/github-actio
import { version as pluginLighthouse } from '../../../../plugins/lighthouse/package.json';
import { version as pluginOrg } from '../../../../plugins/org/package.json';
import { version as pluginPermissionCommon } from '../../../../plugins/permission-common/package.json';
import { version as pluginPermissionReact } from '../../../../plugins/permission-react/package.json';
import { version as pluginPermissionNode } from '../../../../plugins/permission-node/package.json';
import { version as pluginProxyBackend } from '../../../../plugins/proxy-backend/package.json';
import { version as pluginRollbarBackend } from '../../../../plugins/rollbar-backend/package.json';
@@ -89,6 +91,7 @@ export const packageVersions = {
'@backstage/plugin-app-backend': pluginAppBackend,
'@backstage/plugin-auth-backend': pluginAuthBackend,
'@backstage/plugin-catalog': pluginCatalog,
'@backstage/plugin-catalog-common': pluginCatalogCommon,
'@backstage/plugin-catalog-react': pluginCatalogReact,
'@backstage/plugin-catalog-backend': pluginCatalogBackend,
'@backstage/plugin-catalog-graph': pluginCatalogGraph,
@@ -100,6 +103,7 @@ export const packageVersions = {
'@backstage/plugin-org': pluginOrg,
'@backstage/plugin-permission-common': pluginPermissionCommon,
'@backstage/plugin-permission-node': pluginPermissionNode,
'@backstage/plugin-permission-react': pluginPermissionReact,
'@backstage/plugin-proxy-backend': pluginProxyBackend,
'@backstage/plugin-rollbar-backend': pluginRollbarBackend,
'@backstage/plugin-scaffolder': pluginScaffolder,
@@ -13,11 +13,13 @@
"@backstage/integration-react": "^{{version '@backstage/integration-react'}}",
"@backstage/plugin-api-docs": "^{{version '@backstage/plugin-api-docs'}}",
"@backstage/plugin-catalog": "^{{version '@backstage/plugin-catalog'}}",
"@backstage/plugin-catalog-common": "^{{version '@backstage/plugin-catalog-common'}}",
"@backstage/plugin-catalog-graph": "^{{version '@backstage/plugin-catalog-graph'}}",
"@backstage/plugin-catalog-import": "^{{version '@backstage/plugin-catalog-import'}}",
"@backstage/plugin-catalog-react": "^{{version '@backstage/plugin-catalog-react'}}",
"@backstage/plugin-github-actions": "^{{version '@backstage/plugin-github-actions'}}",
"@backstage/plugin-org": "^{{version '@backstage/plugin-org'}}",
"@backstage/plugin-permission-react": "^{{version '@backstage/plugin-permission-react'}}",
"@backstage/plugin-scaffolder": "^{{version '@backstage/plugin-scaffolder'}}",
"@backstage/plugin-search": "^{{version '@backstage/plugin-search'}}",
"@backstage/plugin-tech-radar": "^{{version '@backstage/plugin-tech-radar'}}",
@@ -30,6 +30,8 @@ import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components';
import { createApp } from '@backstage/app-defaults';
import { FlatRoutes } from '@backstage/core-app-api';
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
import { PermissionedRoute } from '@backstage/plugin-permission-react';
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';
const app = createApp({
apis,
@@ -76,7 +78,11 @@ const routes = (
path="/tech-radar"
element={<TechRadarPage width={1500} height={800} />}
/>
<Route path="/catalog-import" element={<CatalogImportPage />} />
<PermissionedRoute
path="/catalog-import"
permission={catalogEntityCreatePermission}
element={<CatalogImportPage />}
/>
<Route path="/search" element={<SearchPage />}>
{searchPage}
</Route>
+3
View File
@@ -5,6 +5,9 @@
```ts
import { Permission } from '@backstage/plugin-permission-common';
// @public
export const catalogEntityCreatePermission: Permission;
// @public
export const catalogEntityDeletePermission: Permission;
+1
View File
@@ -24,6 +24,7 @@
export {
RESOURCE_TYPE_CATALOG_ENTITY,
catalogEntityReadPermission,
catalogEntityCreatePermission,
catalogEntityDeletePermission,
catalogEntityRefreshPermission,
catalogLocationReadPermission,
+14
View File
@@ -38,6 +38,20 @@ export const catalogEntityReadPermission: Permission = {
resourceType: RESOURCE_TYPE_CATALOG_ENTITY,
};
/**
* This permission is used to authorize actions that involve creating a new
* catalog entity. This includes registering an existing component into the
* catalog.
* @public
*/
export const catalogEntityCreatePermission: Permission = {
name: 'catalog.entity.create',
attributes: {
action: 'create',
},
resourceType: RESOURCE_TYPE_CATALOG_ENTITY,
};
/**
* This permission is used to designate actions that involve removing one or
* more entities from the catalog.
+2
View File
@@ -39,7 +39,9 @@
"@backstage/errors": "^0.2.0",
"@backstage/integration": "^0.7.2",
"@backstage/integration-react": "^0.1.20-next.0",
"@backstage/plugin-catalog-common": "^0.1.1",
"@backstage/plugin-catalog-react": "^0.6.13-next.0",
"@backstage/plugin-permission-react": "^0.3.0",
"@backstage/plugin-scaffolder-common": "^0.1.3",
"@backstage/theme": "^0.2.14",
"@backstage/types": "^0.1.1",
@@ -37,6 +37,8 @@ import React, { ComponentType } from 'react';
import { registerComponentRouteRef } from '../../routes';
import { TemplateList } from '../TemplateList';
import { TemplateTypePicker } from '../TemplateTypePicker';
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';
import { usePermission } from '@backstage/plugin-permission-react';
const useStyles = makeStyles(theme => ({
contentWrapper: {
@@ -72,6 +74,8 @@ export const ScaffolderPageContents = ({
},
};
const { allowed } = usePermission(catalogEntityCreatePermission);
return (
<Page themeId="home">
<Header
@@ -85,10 +89,12 @@ export const ScaffolderPageContents = ({
/>
<Content>
<ContentHeader title="Available Templates">
<CreateButton
title="Register Existing Component"
to={registerComponentLink && registerComponentLink()}
/>
{allowed && (
<CreateButton
title="Register Existing Component"
to={registerComponentLink && registerComponentLink()}
/>
)}
<SupportButton>
Create new software components using standard templates. Different
templates create different kinds of components (services, websites,