catalog-backend: support authorization in DefaultCatalogCollator

Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>
This commit is contained in:
MT Lewis
2022-01-17 18:03:42 +00:00
parent f6389e9e5d
commit 4f5bde47e9
4 changed files with 24 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Add support for permissions to the DefaultCatalogCollator by adding the visibilityPermission prop and including authorization.resourceRef on indexed documents.
+3
View File
@@ -26,6 +26,7 @@ import { Location as Location_2 } from '@backstage/catalog-model';
import { LocationSpec } from '@backstage/catalog-model';
import { Logger as Logger_2 } from 'winston';
import { Organizations } from 'aws-sdk';
import { Permission } from '@backstage/plugin-permission-common';
import { PermissionAuthorizer } from '@backstage/plugin-permission-common';
import { PermissionCondition } from '@backstage/plugin-permission-common';
import { PermissionCriteria } from '@backstage/plugin-permission-common';
@@ -539,6 +540,8 @@ export class DefaultCatalogCollator implements DocumentCollator {
protected tokenManager: TokenManager;
// (undocumented)
readonly type: string;
// (undocumented)
readonly visibilityPermission: Permission;
}
// Warning: (ae-missing-release-tag) "DefaultCatalogProcessingOrchestrator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
@@ -113,6 +113,9 @@ describe('DefaultCatalogCollator', () => {
componentType: expectedEntities[0]!.spec!.type,
lifecycle: expectedEntities[0]!.spec!.lifecycle,
owner: expectedEntities[0]!.spec!.owner,
authorization: {
resourceRef: 'component:default/test-entity',
},
});
expect(documents[1]).toMatchObject({
title: expectedEntities[1].metadata.title,
@@ -122,6 +125,9 @@ describe('DefaultCatalogCollator', () => {
componentType: expectedEntities[1]!.spec!.type,
lifecycle: expectedEntities[1]!.spec!.lifecycle,
owner: expectedEntities[1]!.spec!.owner,
authorization: {
resourceRef: 'component:default/test-entity-2',
},
});
});
@@ -18,7 +18,11 @@ import {
PluginEndpointDiscovery,
TokenManager,
} from '@backstage/backend-common';
import { Entity, UserEntity } from '@backstage/catalog-model';
import {
Entity,
stringifyEntityRef,
UserEntity,
} from '@backstage/catalog-model';
import { IndexableDocument, DocumentCollator } from '@backstage/search-common';
import { Config } from '@backstage/config';
import {
@@ -26,6 +30,7 @@ import {
CatalogClient,
CatalogEntitiesRequest,
} from '@backstage/catalog-client';
import { catalogEntityReadPermission } from '@backstage/plugin-catalog-common';
export interface CatalogEntityDocument extends IndexableDocument {
componentType: string;
@@ -41,6 +46,7 @@ export class DefaultCatalogCollator implements DocumentCollator {
protected filter?: CatalogEntitiesRequest['filter'];
protected readonly catalogClient: CatalogApi;
public readonly type: string = 'software-catalog';
public readonly visibilityPermission = catalogEntityReadPermission;
protected tokenManager: TokenManager;
static fromConfig(
@@ -126,6 +132,9 @@ export class DefaultCatalogCollator implements DocumentCollator {
kind: entity.kind,
lifecycle: (entity.spec?.lifecycle as string) || '',
owner: (entity.spec?.owner as string) || '',
authorization: {
resourceRef: stringifyEntityRef(entity),
},
};
});
}