backend: permission policy scaffolder example
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
This commit is contained in:
@@ -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:^",
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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:^"
|
||||
|
||||
Reference in New Issue
Block a user