Merge pull request #26946 from stephenglass/scaffolder-permission-manage1
feat(scaffolder): add permission for template management features
This commit is contained in:
@@ -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
|
||||
@@ -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'>;
|
||||
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
|
||||
+6
-1
@@ -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(
|
||||
<ListItemText primary="Create" />
|
||||
</MenuItem>
|
||||
)}
|
||||
{onEditorClicked && (
|
||||
{onEditorClicked && canManageTemplates && (
|
||||
<MenuItem onClick={onEditorClicked}>
|
||||
<ListItemIcon>
|
||||
<Edit fontSize="small" />
|
||||
|
||||
@@ -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<RouterProps>) => {
|
||||
<Route
|
||||
path={editRouteRef.path}
|
||||
element={
|
||||
<SecretsContextProvider>
|
||||
<TemplateIntroPage />
|
||||
</SecretsContextProvider>
|
||||
<RequirePermission permission={templateManagementPermission}>
|
||||
<SecretsContextProvider>
|
||||
<TemplateIntroPage />
|
||||
</SecretsContextProvider>
|
||||
</RequirePermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path={customFieldsRouteRef.path}
|
||||
element={
|
||||
<SecretsContextProvider>
|
||||
<CustomFieldsPage fieldExtensions={fieldExtensions} />
|
||||
</SecretsContextProvider>
|
||||
<RequirePermission permission={templateManagementPermission}>
|
||||
<SecretsContextProvider>
|
||||
<CustomFieldsPage fieldExtensions={fieldExtensions} />
|
||||
</SecretsContextProvider>
|
||||
</RequirePermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path={templateFormRouteRef.path}
|
||||
element={
|
||||
<SecretsContextProvider>
|
||||
<TemplateFormPage
|
||||
layouts={customLayouts}
|
||||
formProps={props.formProps}
|
||||
fieldExtensions={fieldExtensions}
|
||||
/>
|
||||
</SecretsContextProvider>
|
||||
<RequirePermission permission={templateManagementPermission}>
|
||||
<SecretsContextProvider>
|
||||
<TemplateFormPage
|
||||
layouts={customLayouts}
|
||||
formProps={props.formProps}
|
||||
fieldExtensions={fieldExtensions}
|
||||
/>
|
||||
</SecretsContextProvider>
|
||||
</RequirePermission>
|
||||
}
|
||||
/>
|
||||
|
||||
@@ -212,13 +219,15 @@ export const Router = (props: PropsWithChildren<RouterProps>) => {
|
||||
<Route
|
||||
path={editorRouteRef.path}
|
||||
element={
|
||||
<SecretsContextProvider>
|
||||
<TemplateEditorPage
|
||||
layouts={customLayouts}
|
||||
formProps={props.formProps}
|
||||
fieldExtensions={fieldExtensions}
|
||||
/>
|
||||
</SecretsContextProvider>
|
||||
<RequirePermission permission={templateManagementPermission}>
|
||||
<SecretsContextProvider>
|
||||
<TemplateEditorPage
|
||||
layouts={customLayouts}
|
||||
formProps={props.formProps}
|
||||
fieldExtensions={fieldExtensions}
|
||||
/>
|
||||
</SecretsContextProvider>
|
||||
</RequirePermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
|
||||
Reference in New Issue
Block a user