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 && (