backend: permission policy scaffolder example

Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
This commit is contained in:
Vincenzo Scamporlino
2023-01-11 11:21:13 +01:00
parent 1424f89d4d
commit 766298715c
3 changed files with 18 additions and 8 deletions
+1
View File
@@ -60,6 +60,7 @@
"@backstage/plugin-rollbar-backend": "workspace:^",
"@backstage/plugin-scaffolder-backend": "workspace:^",
"@backstage/plugin-scaffolder-backend-module-rails": "workspace:^",
"@backstage/plugin-scaffolder-common": "workspace:^",
"@backstage/plugin-search-backend": "workspace:^",
"@backstage/plugin-search-backend-module-elasticsearch": "workspace:^",
"@backstage/plugin-search-backend-module-pg": "workspace:^",
+13 -8
View File
@@ -18,28 +18,33 @@ import { BackstageIdentityResponse } from '@backstage/plugin-auth-node';
import { createRouter } from '@backstage/plugin-permission-backend';
import {
AuthorizeResult,
isPermission,
PolicyDecision,
} from '@backstage/plugin-permission-common';
import {
PermissionPolicy,
PolicyQuery,
} from '@backstage/plugin-permission-node';
import {
DefaultPlaylistPermissionPolicy,
isPlaylistPermission,
} from '@backstage/plugin-playlist-backend';
createScaffolderConditionalDecision,
scaffolderConditions,
} from '@backstage/plugin-scaffolder-backend';
import { templateSchemaExecutePermission } from '@backstage/plugin-scaffolder-common';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
class ExamplePermissionPolicy implements PermissionPolicy {
private playlistPermissionPolicy = new DefaultPlaylistPermissionPolicy();
async handle(
request: PolicyQuery,
user?: BackstageIdentityResponse,
_user?: BackstageIdentityResponse,
): Promise<PolicyDecision> {
if (isPlaylistPermission(request.permission)) {
return this.playlistPermissionPolicy.handle(request, user);
if (isPermission(request.permission, templateSchemaExecutePermission)) {
return createScaffolderConditionalDecision(request.permission, [
scaffolderConditions.allowCapabilities({
capabilities: ['example'],
}),
]);
}
return {
+4
View File
@@ -7585,6 +7585,8 @@ __metadata:
"@backstage/plugin-catalog-backend": "workspace:^"
"@backstage/plugin-catalog-common": "workspace:^"
"@backstage/plugin-catalog-node": "workspace:^"
"@backstage/plugin-permission-common": "workspace:^"
"@backstage/plugin-permission-node": "workspace:^"
"@backstage/plugin-scaffolder-common": "workspace:^"
"@backstage/plugin-scaffolder-node": "workspace:^"
"@backstage/types": "workspace:^"
@@ -7644,6 +7646,7 @@ __metadata:
dependencies:
"@backstage/catalog-model": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/plugin-permission-common": "workspace:^"
"@backstage/types": "workspace:^"
languageName: unknown
linkType: soft
@@ -22940,6 +22943,7 @@ __metadata:
"@backstage/plugin-rollbar-backend": "workspace:^"
"@backstage/plugin-scaffolder-backend": "workspace:^"
"@backstage/plugin-scaffolder-backend-module-rails": "workspace:^"
"@backstage/plugin-scaffolder-common": "workspace:^"
"@backstage/plugin-search-backend": "workspace:^"
"@backstage/plugin-search-backend-module-elasticsearch": "workspace:^"
"@backstage/plugin-search-backend-module-pg": "workspace:^"