Skip to content

Commit

Permalink
Integrate catalog-import with permissions
Browse files Browse the repository at this point in the history
Signed-off-by: Joon Park <joonp@spotify.com>
  • Loading branch information
Joonpark13 committed Feb 1, 2022
1 parent a28838a commit ba59832
Show file tree
Hide file tree
Showing 13 changed files with 67 additions and 6 deletions.
5 changes: 5 additions & 0 deletions .changeset/cyan-turtles-relax.md
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-common': patch
---

Add catalogEntityCreatePermission
5 changes: 5 additions & 0 deletions .changeset/fresh-insects-attack.md
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---

Permission the Register Existing Component button
5 changes: 5 additions & 0 deletions .changeset/silver-eagles-reply.md
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---

Permission the catalog-import route
2 changes: 2 additions & 0 deletions packages/app/package.json
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
8 changes: 7 additions & 1 deletion packages/app/src/App.tsx
Expand Up @@ -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,
Expand Down Expand Up @@ -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={
Expand Down
4 changes: 4 additions & 0 deletions packages/create-app/src/lib/versions.ts
Expand Up @@ -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';
Expand All @@ -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';
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down
Expand Up @@ -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'}}",
Expand Down
Expand Up @@ -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,
Expand Down Expand Up @@ -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>
Expand Down
3 changes: 3 additions & 0 deletions plugins/catalog-common/api-report.md
Expand Up @@ -5,6 +5,9 @@
```ts
import { Permission } from '@backstage/plugin-permission-common';

// @public
export const catalogEntityCreatePermission: Permission;

// @public
export const catalogEntityDeletePermission: Permission;

Expand Down
1 change: 1 addition & 0 deletions plugins/catalog-common/src/index.ts
Expand Up @@ -24,6 +24,7 @@
export {
RESOURCE_TYPE_CATALOG_ENTITY,
catalogEntityReadPermission,
catalogEntityCreatePermission,
catalogEntityDeletePermission,
catalogEntityRefreshPermission,
catalogLocationReadPermission,
Expand Down
14 changes: 14 additions & 0 deletions plugins/catalog-common/src/permissions.ts
Expand Up @@ -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.
Expand Down
2 changes: 2 additions & 0 deletions plugins/scaffolder/package.json
Expand Up @@ -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",
Expand Down
Expand Up @@ -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: {
Expand Down Expand Up @@ -72,6 +74,8 @@ export const ScaffolderPageContents = ({
},
};

const { allowed } = usePermission(catalogEntityCreatePermission);

return (
<Page themeId="home">
<Header
Expand All @@ -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,
Expand Down

0 comments on commit ba59832

Please sign in to comment.