diff --git a/.changeset/lemon-gifts-crash.md b/.changeset/lemon-gifts-crash.md new file mode 100644 index 0000000000..c4ab159dc8 --- /dev/null +++ b/.changeset/lemon-gifts-crash.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-scaffolder-common': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': minor +--- + +Add scaffolder permission `scaffolder.template.management` for accessing the template management features diff --git a/plugins/scaffolder-common/report-alpha.api.md b/plugins/scaffolder-common/report-alpha.api.md index 36b6a7cdb0..97a3de63c5 100644 --- a/plugins/scaffolder-common/report-alpha.api.md +++ b/plugins/scaffolder-common/report-alpha.api.md @@ -40,6 +40,9 @@ export const taskCreatePermission: BasicPermission; // @alpha export const taskReadPermission: BasicPermission; +// @alpha +export const templateManagementPermission: BasicPermission; + // @alpha export const templateParameterReadPermission: ResourcePermission<'scaffolder-template'>; diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index c441b48d5d..e758291e75 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -113,6 +113,16 @@ export const taskCancelPermission = createPermission({ attributes: {}, }); +/** + * This permission is used to authorize template management features. + * + * @alpha + */ +export const templateManagementPermission = createPermission({ + name: 'scaffolder.template.management', + attributes: {}, +}); + /** * List of the scaffolder permissions that are associated with template steps and parameters. * @alpha @@ -146,4 +156,5 @@ export const scaffolderPermissions = [ ...scaffolderTemplatePermissions, ...scaffolderActionPermissions, ...scaffolderTaskPermissions, + templateManagementPermission, ]; diff --git a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx index 23b34123d1..721e53f6e6 100644 --- a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx +++ b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx @@ -29,6 +29,7 @@ import MoreVert from '@material-ui/icons/MoreVert'; import React, { useState } from 'react'; import { usePermission } from '@backstage/plugin-permission-react'; import { taskReadPermission } from '@backstage/plugin-scaffolder-common/alpha'; +import { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha'; const useStyles = makeStyles(theme => ({ button: { @@ -61,6 +62,10 @@ export function ScaffolderPageContextMenu( permission: taskReadPermission, }); + const { allowed: canManageTemplates } = usePermission({ + permission: templateManagementPermission, + }); + if (!onEditorClicked && !onActionsClicked) { return null; } @@ -106,7 +111,7 @@ export function ScaffolderPageContextMenu( )} - {onEditorClicked && ( + {onEditorClicked && canManageTemplates && ( diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index 1121fd2766..ce31d2f975 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -61,6 +61,7 @@ import { } from '../../alpha/components/TemplateEditorPage'; import { RequirePermission } from '@backstage/plugin-permission-react'; import { taskReadPermission } from '@backstage/plugin-scaffolder-common/alpha'; +import { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha'; /** * The Props for the Scaffolder Router @@ -174,29 +175,35 @@ export const Router = (props: PropsWithChildren) => { - - + + + + + } /> - - + + + + + } /> - - + + + + + } /> @@ -212,13 +219,15 @@ export const Router = (props: PropsWithChildren) => { - - + + + + + } />