diff --git a/.changeset/afraid-boats-check.md b/.changeset/afraid-boats-check.md new file mode 100644 index 0000000000..d36fda4e03 --- /dev/null +++ b/.changeset/afraid-boats-check.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-techdocs-backend': patch +--- + +Specify type of `visibilityPermission` property on collators and collator factories. diff --git a/.changeset/metal-queens-cheat.md b/.changeset/metal-queens-cheat.md new file mode 100644 index 0000000000..b2d152b3a9 --- /dev/null +++ b/.changeset/metal-queens-cheat.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-common': patch +'@backstage/plugin-jenkins-common': patch +--- + +Use `createPermission` helper when creating permissions. diff --git a/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts b/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts index ac9a33bf62..bb44670443 100644 --- a/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts +++ b/plugins/catalog-backend/src/search/DefaultCatalogCollator.ts @@ -33,6 +33,7 @@ import { catalogEntityReadPermission, CatalogEntityDocument, } from '@backstage/plugin-catalog-common'; +import { Permission } from '@backstage/plugin-permission-common'; /** * @public @@ -45,7 +46,8 @@ export class DefaultCatalogCollator { protected filter?: GetEntitiesRequest['filter']; protected readonly catalogClient: CatalogApi; public readonly type: string = 'software-catalog'; - public readonly visibilityPermission = catalogEntityReadPermission; + public readonly visibilityPermission: Permission = + catalogEntityReadPermission; protected tokenManager: TokenManager; static fromConfig( diff --git a/plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.ts b/plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.ts index 4d28559c82..98bcfcd8d4 100644 --- a/plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.ts +++ b/plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.ts @@ -34,6 +34,7 @@ import { catalogEntityReadPermission, CatalogEntityDocument, } from '@backstage/plugin-catalog-common'; +import { Permission } from '@backstage/plugin-permission-common'; import { Readable } from 'stream'; /** @public */ @@ -49,7 +50,8 @@ export type DefaultCatalogCollatorFactoryOptions = { /** @public */ export class DefaultCatalogCollatorFactory implements DocumentCollatorFactory { public readonly type: string = 'software-catalog'; - public readonly visibilityPermission = catalogEntityReadPermission; + public readonly visibilityPermission: Permission = + catalogEntityReadPermission; private locationTemplate: string; private filter?: GetEntitiesRequest['filter']; diff --git a/plugins/catalog-common/api-report.md b/plugins/catalog-common/api-report.md index a73cae9994..12ad6af751 100644 --- a/plugins/catalog-common/api-report.md +++ b/plugins/catalog-common/api-report.md @@ -3,14 +3,15 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BasicPermission } from '@backstage/plugin-permission-common'; import { IndexableDocument } from '@backstage/search-common'; -import { Permission } from '@backstage/plugin-permission-common'; +import { ResourcePermission } from '@backstage/plugin-permission-common'; // @alpha -export const catalogEntityCreatePermission: Permission; +export const catalogEntityCreatePermission: BasicPermission; // @alpha -export const catalogEntityDeletePermission: Permission; +export const catalogEntityDeletePermission: ResourcePermission<'catalog-entity'>; // @public export interface CatalogEntityDocument extends IndexableDocument { @@ -29,19 +30,19 @@ export interface CatalogEntityDocument extends IndexableDocument { } // @alpha -export const catalogEntityReadPermission: Permission; +export const catalogEntityReadPermission: ResourcePermission<'catalog-entity'>; // @alpha -export const catalogEntityRefreshPermission: Permission; +export const catalogEntityRefreshPermission: ResourcePermission<'catalog-entity'>; // @alpha -export const catalogLocationCreatePermission: Permission; +export const catalogLocationCreatePermission: BasicPermission; // @alpha -export const catalogLocationDeletePermission: Permission; +export const catalogLocationDeletePermission: BasicPermission; // @alpha -export const catalogLocationReadPermission: Permission; +export const catalogLocationReadPermission: BasicPermission; // @alpha export const RESOURCE_TYPE_CATALOG_ENTITY = 'catalog-entity'; diff --git a/plugins/catalog-common/src/permissions.ts b/plugins/catalog-common/src/permissions.ts index 31a8f32118..51a15bb85e 100644 --- a/plugins/catalog-common/src/permissions.ts +++ b/plugins/catalog-common/src/permissions.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Permission } from '@backstage/plugin-permission-common'; +import { createPermission } from '@backstage/plugin-permission-common'; /** * Permission resource type which corresponds to catalog entities. @@ -32,13 +32,13 @@ export const RESOURCE_TYPE_CATALOG_ENTITY = 'catalog-entity'; * exist in the catalog — both in the frontend and in API responses. * @alpha */ -export const catalogEntityReadPermission: Permission = { +export const catalogEntityReadPermission = createPermission({ name: 'catalog.entity.read', attributes: { action: 'read', }, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, -}; +}); /** * This permission is used to authorize actions that involve creating a new @@ -46,38 +46,38 @@ export const catalogEntityReadPermission: Permission = { * catalog. * @alpha */ -export const catalogEntityCreatePermission: Permission = { +export const catalogEntityCreatePermission = createPermission({ name: 'catalog.entity.create', attributes: { action: 'create', }, -}; +}); /** * This permission is used to designate actions that involve removing one or * more entities from the catalog. * @alpha */ -export const catalogEntityDeletePermission: Permission = { +export const catalogEntityDeletePermission = createPermission({ name: 'catalog.entity.delete', attributes: { action: 'delete', }, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, -}; +}); /** * This permission is used to designate refreshing one or more entities from the * catalog. * @alpha */ -export const catalogEntityRefreshPermission: Permission = { +export const catalogEntityRefreshPermission = createPermission({ name: 'catalog.entity.refresh', attributes: { action: 'update', }, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, -}; +}); /** * This permission is used to designate actions that involve reading one or more @@ -87,33 +87,33 @@ export const catalogEntityRefreshPermission: Permission = { * not exist in the catalog — both in the frontend and in API responses. * @alpha */ -export const catalogLocationReadPermission: Permission = { +export const catalogLocationReadPermission = createPermission({ name: 'catalog.location.read', attributes: { action: 'read', }, -}; +}); /** * This permission is used to designate actions that involve creating catalog * locations. * @alpha */ -export const catalogLocationCreatePermission: Permission = { +export const catalogLocationCreatePermission = createPermission({ name: 'catalog.location.create', attributes: { action: 'create', }, -}; +}); /** * This permission is used to designate actions that involve deleting locations * from the catalog. * @alpha */ -export const catalogLocationDeletePermission: Permission = { +export const catalogLocationDeletePermission = createPermission({ name: 'catalog.location.delete', attributes: { action: 'delete', }, -}; +}); diff --git a/plugins/jenkins-common/api-report.md b/plugins/jenkins-common/api-report.md index 7b0d3759ba..771161e1cb 100644 --- a/plugins/jenkins-common/api-report.md +++ b/plugins/jenkins-common/api-report.md @@ -3,10 +3,10 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { Permission } from '@backstage/plugin-permission-common'; +import { ResourcePermission } from '@backstage/plugin-permission-common'; // @public -export const jenkinsExecutePermission: Permission; +export const jenkinsExecutePermission: ResourcePermission<'catalog-entity'>; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/jenkins-common/src/permissions.ts b/plugins/jenkins-common/src/permissions.ts index 2fa8c14232..5ca5ec6adf 100644 --- a/plugins/jenkins-common/src/permissions.ts +++ b/plugins/jenkins-common/src/permissions.ts @@ -14,17 +14,17 @@ * limitations under the License. */ import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; -import { Permission } from '@backstage/plugin-permission-common'; +import { createPermission } from '@backstage/plugin-permission-common'; /** * This permission is used to determine if a user is allowed to execute an action in jenkins plugin * * @public */ -export const jenkinsExecutePermission: Permission = { +export const jenkinsExecutePermission = createPermission({ name: 'jenkins.execute', attributes: { action: 'update', }, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, -}; +}); diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 7d512656c9..b278f8919a 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -41,6 +41,7 @@ "@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-search-common": "^0.3.3-next.0", "@backstage/plugin-techdocs-node": "^1.0.1-next.0", "@types/express": "^4.17.6", diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts index 7529eaca66..bf647322cf 100644 --- a/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts +++ b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts @@ -30,6 +30,7 @@ import { Logger } from 'winston'; import pLimit from 'p-limit'; import { Config } from '@backstage/config'; import { catalogEntityReadPermission } from '@backstage/plugin-catalog-common'; +import { Permission } from '@backstage/plugin-permission-common'; import { CatalogApi, CatalogClient, @@ -73,7 +74,8 @@ type EntityInfo = { */ export class DefaultTechDocsCollator { public readonly type: string = 'techdocs'; - public readonly visibilityPermission = catalogEntityReadPermission; + public readonly visibilityPermission: Permission = + catalogEntityReadPermission; private constructor( private readonly legacyPathCasing: boolean, diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts b/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts index 41d637e319..915b027854 100644 --- a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts +++ b/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts @@ -31,6 +31,7 @@ import { } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { catalogEntityReadPermission } from '@backstage/plugin-catalog-common'; +import { Permission } from '@backstage/plugin-permission-common'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; import unescape from 'lodash/unescape'; @@ -74,7 +75,8 @@ type EntityInfo = { */ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { public readonly type: string = 'techdocs'; - public readonly visibilityPermission = catalogEntityReadPermission; + public readonly visibilityPermission: Permission = + catalogEntityReadPermission; private discovery: PluginEndpointDiscovery; private locationTemplate: string;