@backstage-community/plugin-rbac 1.36.0 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/components/CreateRole/CancelDialog.esm.js +90 -0
- package/dist/components/CreateRole/CancelDialog.esm.js.map +1 -0
- package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js +1 -2
- package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js.map +1 -1
- package/dist/components/CreateRole/RoleForm.esm.js +14 -22
- package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
- package/dist/utils/role-form-utils.esm.js +17 -1
- package/dist/utils/role-form-utils.esm.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 1.38.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- a7730fc: Update shared react library @janus-idp/shared-react to version 2.16.0 with newer @kubernetes/client-node@1.0.0-rc7.
|
|
8
|
+
|
|
9
|
+
## 1.37.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 5934dfe: Open confirmation modal with options to discard the entered information or continue with adding more information on create/edit role forms cancel button click.
|
|
14
|
+
|
|
3
15
|
## 1.36.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
import Button from '@mui/material/Button';
|
|
5
|
+
import Dialog from '@mui/material/Dialog';
|
|
6
|
+
import DialogActions from '@mui/material/DialogActions';
|
|
7
|
+
import DialogContent from '@mui/material/DialogContent';
|
|
8
|
+
import DialogTitle from '@mui/material/DialogTitle';
|
|
9
|
+
import IconButton from '@mui/material/IconButton';
|
|
10
|
+
import Typography from '@mui/material/Typography';
|
|
11
|
+
import WarningOutlinedIcon from '@mui/icons-material/WarningOutlined';
|
|
12
|
+
|
|
13
|
+
const CancelDialog = ({
|
|
14
|
+
open,
|
|
15
|
+
editForm,
|
|
16
|
+
closeDialog,
|
|
17
|
+
navigateTo
|
|
18
|
+
}) => {
|
|
19
|
+
const dialogBackgroundColor = (theme) => theme.palette.mode === "dark" ? "#1b1d21" : "#fff";
|
|
20
|
+
return /* @__PURE__ */ React__default.createElement(Dialog, { maxWidth: "md", open, onClose: closeDialog }, /* @__PURE__ */ React__default.createElement(Box, { sx: { backgroundColor: dialogBackgroundColor } }, /* @__PURE__ */ React__default.createElement(
|
|
21
|
+
DialogTitle,
|
|
22
|
+
{
|
|
23
|
+
id: "cancel-dialog",
|
|
24
|
+
title: "Cancel role creation",
|
|
25
|
+
sx: {
|
|
26
|
+
marginBottom: "0 !important",
|
|
27
|
+
p: 2
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
/* @__PURE__ */ React__default.createElement(
|
|
31
|
+
Box,
|
|
32
|
+
{
|
|
33
|
+
sx: {
|
|
34
|
+
display: "flex",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "space-between"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
/* @__PURE__ */ React__default.createElement(
|
|
40
|
+
Typography,
|
|
41
|
+
{
|
|
42
|
+
component: "span",
|
|
43
|
+
sx: {
|
|
44
|
+
fontWeight: (theme) => theme.typography.fontWeightBold,
|
|
45
|
+
display: "flex",
|
|
46
|
+
alignItems: "center",
|
|
47
|
+
gap: (theme) => theme.spacing(1)
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
/* @__PURE__ */ React__default.createElement(
|
|
51
|
+
WarningOutlinedIcon,
|
|
52
|
+
{
|
|
53
|
+
sx: {
|
|
54
|
+
color: "#F0AB00"
|
|
55
|
+
},
|
|
56
|
+
fontSize: "small"
|
|
57
|
+
}
|
|
58
|
+
),
|
|
59
|
+
" ",
|
|
60
|
+
`Exit role ${editForm ? "editing" : "creation"}?`
|
|
61
|
+
),
|
|
62
|
+
/* @__PURE__ */ React__default.createElement(
|
|
63
|
+
IconButton,
|
|
64
|
+
{
|
|
65
|
+
"aria-label": "close",
|
|
66
|
+
sx: {
|
|
67
|
+
color: (theme) => theme.palette.grey[500],
|
|
68
|
+
borderRadius: "50%",
|
|
69
|
+
p: 0
|
|
70
|
+
},
|
|
71
|
+
onClick: closeDialog
|
|
72
|
+
},
|
|
73
|
+
/* @__PURE__ */ React__default.createElement(CloseIcon, null)
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
), /* @__PURE__ */ React__default.createElement(DialogContent, { sx: { p: 2 } }, "Exiting this page will permanently discard the information you entered.", /* @__PURE__ */ React__default.createElement("br", null), "Are you sure you want to exit?"), /* @__PURE__ */ React__default.createElement(
|
|
77
|
+
DialogActions,
|
|
78
|
+
{
|
|
79
|
+
sx: {
|
|
80
|
+
justifyContent: "left",
|
|
81
|
+
p: 2
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
/* @__PURE__ */ React__default.createElement(Button, { variant: "contained", onClick: navigateTo }, "Discard"),
|
|
85
|
+
/* @__PURE__ */ React__default.createElement(Button, { variant: "outlined", onClick: closeDialog }, "Cancel")
|
|
86
|
+
)));
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export { CancelDialog as default };
|
|
90
|
+
//# sourceMappingURL=CancelDialog.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CancelDialog.esm.js","sources":["../../../src/components/CreateRole/CancelDialog.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport WarningOutlinedIcon from '@mui/icons-material/WarningOutlined';\n\ntype CancelDialogProps = {\n open: boolean;\n editForm: boolean;\n closeDialog: () => void;\n navigateTo: () => void;\n};\n\nconst CancelDialog = ({\n open,\n editForm,\n closeDialog,\n navigateTo,\n}: CancelDialogProps) => {\n const dialogBackgroundColor = (theme: { palette: { mode: string } }) =>\n theme.palette.mode === 'dark' ? '#1b1d21' : '#fff';\n\n return (\n <Dialog maxWidth=\"md\" open={open} onClose={closeDialog}>\n <Box sx={{ backgroundColor: dialogBackgroundColor }}>\n <DialogTitle\n id=\"cancel-dialog\"\n title=\"Cancel role creation\"\n sx={{\n marginBottom: '0 !important',\n p: 2,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <Typography\n component=\"span\"\n sx={{\n fontWeight: theme => theme.typography.fontWeightBold,\n display: 'flex',\n alignItems: 'center',\n gap: theme => theme.spacing(1),\n }}\n >\n <WarningOutlinedIcon\n sx={{\n color: '#F0AB00',\n }}\n fontSize=\"small\"\n />{' '}\n {`Exit role ${editForm ? 'editing' : 'creation'}?`}\n </Typography>\n\n <IconButton\n aria-label=\"close\"\n sx={{\n color: theme => theme.palette.grey[500],\n borderRadius: '50%',\n p: 0,\n }}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent sx={{ p: 2 }}>\n Exiting this page will permanently discard the information you\n entered.\n <br />\n Are you sure you want to exit?\n </DialogContent>\n <DialogActions\n sx={{\n justifyContent: 'left',\n p: 2,\n }}\n >\n <Button variant=\"contained\" onClick={navigateTo}>\n Discard\n </Button>\n <Button variant=\"outlined\" onClick={closeDialog}>\n Cancel\n </Button>\n </DialogActions>\n </Box>\n </Dialog>\n );\n};\n\nexport default CancelDialog;\n"],"names":["React"],"mappings":";;;;;;;;;;;;AAmCA,MAAM,eAAe,CAAC;AAAA,EACpB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAyB,KAAA;AACvB,EAAA,MAAM,wBAAwB,CAAC,KAAA,KAC7B,MAAM,OAAQ,CAAA,IAAA,KAAS,SAAS,SAAY,GAAA,MAAA;AAE9C,EAAA,uBACGA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,QAAS,EAAA,IAAA,EAAK,IAAY,EAAA,OAAA,EAAS,WACzC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,EAAE,eAAA,EAAiB,uBAC1B,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,eAAA;AAAA,MACH,KAAM,EAAA,sBAAA;AAAA,MACN,EAAI,EAAA;AAAA,QACF,YAAc,EAAA,cAAA;AAAA,QACd,CAAG,EAAA;AAAA;AACL,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA;AAAA,UACF,OAAS,EAAA,MAAA;AAAA,UACT,UAAY,EAAA,QAAA;AAAA,UACZ,cAAgB,EAAA;AAAA;AAClB,OAAA;AAAA,sBAEAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,MAAA;AAAA,UACV,EAAI,EAAA;AAAA,YACF,UAAA,EAAY,CAAS,KAAA,KAAA,KAAA,CAAM,UAAW,CAAA,cAAA;AAAA,YACtC,OAAS,EAAA,MAAA;AAAA,YACT,UAAY,EAAA,QAAA;AAAA,YACZ,GAAK,EAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA;AAC/B,SAAA;AAAA,wBAEAA,cAAA,CAAA,aAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACC,EAAI,EAAA;AAAA,cACF,KAAO,EAAA;AAAA,aACT;AAAA,YACA,QAAS,EAAA;AAAA;AAAA,SACX;AAAA,QAAG,GAAA;AAAA,QACF,CAAA,UAAA,EAAa,QAAW,GAAA,SAAA,GAAY,UAAU,CAAA,CAAA;AAAA,OACjD;AAAA,sBAEAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,YAAW,EAAA,OAAA;AAAA,UACX,EAAI,EAAA;AAAA,YACF,KAAO,EAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,YACtC,YAAc,EAAA,KAAA;AAAA,YACd,CAAG,EAAA;AAAA,WACL;AAAA,UACA,OAAS,EAAA;AAAA,SAAA;AAAA,qDAER,SAAU,EAAA,IAAA;AAAA;AACb;AACF,GAEF,kBAAAA,cAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,EAAA,EAAI,EAAE,CAAA,EAAG,CAAE,EAAA,EAAA,EAAG,yEAG3B,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAG,EAAA,IAAA,CAAA,EAAE,gCAER,CACA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,cAAgB,EAAA,MAAA;AAAA,QAChB,CAAG,EAAA;AAAA;AACL,KAAA;AAAA,iDAEC,MAAO,EAAA,EAAA,OAAA,EAAQ,WAAY,EAAA,OAAA,EAAS,cAAY,SAEjD,CAAA;AAAA,iDACC,MAAO,EAAA,EAAA,OAAA,EAAQ,UAAW,EAAA,OAAA,EAAS,eAAa,QAEjD;AAAA,GAEJ,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionPoliciesFormNestedRow.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormNestedRow.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport TableCell from '@mui/material/TableCell';\nimport TableRow from '@mui/material/TableRow';\nimport Typography from '@mui/material/Typography';\nimport React from 'react';\nimport { RowPolicy } from './types';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconButton from '@mui/material/IconButton';\nimport ChecklistRtlIcon from '@mui/icons-material/ChecklistRtl';\nimport Badge from '@mui/material/Badge';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport { ConditionalAccessSidebar } from '../ConditionalAccess/ConditionalAccessSidebar';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\n\nconst PermissionPoliciesFormNestedRow = ({\n plugin,\n permissionPolicy,\n permissionPolicyRowIndex,\n onSelectPermission,\n policies,\n onSelectPolicy,\n conditionRulesLength,\n totalRulesCount,\n onRemovePermission,\n conditionRulesData,\n conditionsData,\n onAddConditions,\n}: {\n plugin: string;\n permissionPolicy: any;\n permissionPolicyRowIndex: number;\n policies: RowPolicy[];\n conditionRulesLength?: number;\n totalRulesCount: number;\n conditionRulesData?: ConditionRulesData;\n conditionsData?: ConditionsData;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePermission: (index: number) => void;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n}) => {\n const [sidebarOpen, setSidebarOpen] = React.useState(false);\n const tooltipTitle = () => (\n <div>\n <Typography component=\"p\" align=\"center\">\n Use advanced customized permissions to allow access to specific parts of\n the selected resource type.\n </Typography>\n </div>\n );\n return (\n <>\n <TableRow>\n <TableCell align=\"left\" sx={{ borderBottom: 'none', width: '30%' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n color: theme => theme.palette.grey[700],\n }}\n >\n <Checkbox\n onChange={e => {\n if (e.target.checked) {\n onSelectPermission(\n plugin,\n permissionPolicy.permission,\n permissionPolicy.isResourced,\n permissionPolicy.actions,\n permissionPolicy.resourceType,\n );\n } else {\n onRemovePermission(permissionPolicyRowIndex);\n }\n }}\n checked={permissionPolicyRowIndex >= 0}\n />\n {permissionPolicy.permission}\n {permissionPolicy.resourceType ? (\n <Tooltip\n title={`resource type: ${permissionPolicy.resourceType}`}\n placement=\"top\"\n >\n <IconButton aria-label=\"info\" size=\"small\">\n <InfoOutlinedIcon fontSize=\"small\" />\n \n </IconButton>\n </Tooltip>\n ) : null}\n </Box>\n </TableCell>\n <TableCell\n align=\"left\"\n sx={{\n display: 'flex',\n borderBottom: 'none',\n width: '100%',\n }}\n >\n {policies.map((p: RowPolicy, pIndex: number) => (\n <Box\n sx={{ display: 'flex', alignItems: 'center' }}\n key={`${permissionPolicy.permission}-${p.policy}`}\n >\n <Checkbox\n onChange={(_e, checked) =>\n onSelectPolicy(checked, pIndex, permissionPolicyRowIndex)\n }\n checked={p.effect === 'allow'}\n disabled={permissionPolicyRowIndex < 0}\n />\n {p.policy}\n </Box>\n ))}\n </TableCell>\n <TableCell align=\"right\" sx={{ borderBottom: 'none', width: '10%' }}>\n <Tooltip title={tooltipTitle()} placement=\"top\">\n <Typography component=\"span\">\n <IconButton\n aria-label=\"remove\"\n size=\"small\"\n onClick={() => setSidebarOpen(true)}\n disabled={\n permissionPolicyRowIndex < 0 ||\n !permissionPolicy.isResourced ||\n !conditionRulesLength\n }\n sx={{\n ':disabled': { color: theme => theme.palette.grey[400] },\n }}\n >\n <Badge badgeContent={totalRulesCount} color=\"success\">\n <ChecklistRtlIcon />\n </Badge>\n \n </IconButton>\n </Typography>\n </Tooltip>\n </TableCell>\n </TableRow>\n <ConditionalAccessSidebar\n open={sidebarOpen}\n onClose={() => {\n setSidebarOpen(false);\n }}\n onSave={(conditions?: ConditionsData) => {\n onAddConditions(permissionPolicyRowIndex, conditions);\n setSidebarOpen(false);\n }}\n conditionsFormVal={conditionsData}\n selPluginResourceType={permissionPolicy.resourceType}\n conditionRulesData={\n conditionRulesData?.[`${plugin}`]?.[\n `${permissionPolicy.resourceType}`\n ]\n }\n />\n </>\n );\n};\n\nexport default PermissionPoliciesFormNestedRow;\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PermissionPoliciesFormNestedRow.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormNestedRow.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport TableCell from '@mui/material/TableCell';\nimport TableRow from '@mui/material/TableRow';\nimport Typography from '@mui/material/Typography';\nimport React from 'react';\nimport { RowPolicy } from './types';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconButton from '@mui/material/IconButton';\nimport ChecklistRtlIcon from '@mui/icons-material/ChecklistRtl';\nimport Badge from '@mui/material/Badge';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport { ConditionalAccessSidebar } from '../ConditionalAccess/ConditionalAccessSidebar';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\n\nconst PermissionPoliciesFormNestedRow = ({\n plugin,\n permissionPolicy,\n permissionPolicyRowIndex,\n onSelectPermission,\n policies,\n onSelectPolicy,\n conditionRulesLength,\n totalRulesCount,\n onRemovePermission,\n conditionRulesData,\n conditionsData,\n onAddConditions,\n}: {\n plugin: string;\n permissionPolicy: any;\n permissionPolicyRowIndex: number;\n policies: RowPolicy[];\n conditionRulesLength?: number;\n totalRulesCount: number;\n conditionRulesData?: ConditionRulesData;\n conditionsData?: ConditionsData;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePermission: (index: number) => void;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n}) => {\n const [sidebarOpen, setSidebarOpen] = React.useState(false);\n const tooltipTitle = () => (\n <div>\n <Typography component=\"p\" align=\"center\">\n Use advanced customized permissions to allow access to specific parts of\n the selected resource type.\n </Typography>\n </div>\n );\n return (\n <>\n <TableRow>\n <TableCell align=\"left\" sx={{ borderBottom: 'none', width: '30%' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <Checkbox\n onChange={e => {\n if (e.target.checked) {\n onSelectPermission(\n plugin,\n permissionPolicy.permission,\n permissionPolicy.isResourced,\n permissionPolicy.actions,\n permissionPolicy.resourceType,\n );\n } else {\n onRemovePermission(permissionPolicyRowIndex);\n }\n }}\n checked={permissionPolicyRowIndex >= 0}\n />\n {permissionPolicy.permission}\n {permissionPolicy.resourceType ? (\n <Tooltip\n title={`resource type: ${permissionPolicy.resourceType}`}\n placement=\"top\"\n >\n <IconButton aria-label=\"info\" size=\"small\">\n <InfoOutlinedIcon fontSize=\"small\" />\n \n </IconButton>\n </Tooltip>\n ) : null}\n </Box>\n </TableCell>\n <TableCell\n align=\"left\"\n sx={{\n display: 'flex',\n borderBottom: 'none',\n width: '100%',\n }}\n >\n {policies.map((p: RowPolicy, pIndex: number) => (\n <Box\n sx={{ display: 'flex', alignItems: 'center' }}\n key={`${permissionPolicy.permission}-${p.policy}`}\n >\n <Checkbox\n onChange={(_e, checked) =>\n onSelectPolicy(checked, pIndex, permissionPolicyRowIndex)\n }\n checked={p.effect === 'allow'}\n disabled={permissionPolicyRowIndex < 0}\n />\n {p.policy}\n </Box>\n ))}\n </TableCell>\n <TableCell align=\"right\" sx={{ borderBottom: 'none', width: '10%' }}>\n <Tooltip title={tooltipTitle()} placement=\"top\">\n <Typography component=\"span\">\n <IconButton\n aria-label=\"remove\"\n size=\"small\"\n onClick={() => setSidebarOpen(true)}\n disabled={\n permissionPolicyRowIndex < 0 ||\n !permissionPolicy.isResourced ||\n !conditionRulesLength\n }\n sx={{\n ':disabled': { color: theme => theme.palette.grey[400] },\n }}\n >\n <Badge badgeContent={totalRulesCount} color=\"success\">\n <ChecklistRtlIcon />\n </Badge>\n \n </IconButton>\n </Typography>\n </Tooltip>\n </TableCell>\n </TableRow>\n <ConditionalAccessSidebar\n open={sidebarOpen}\n onClose={() => {\n setSidebarOpen(false);\n }}\n onSave={(conditions?: ConditionsData) => {\n onAddConditions(permissionPolicyRowIndex, conditions);\n setSidebarOpen(false);\n }}\n conditionsFormVal={conditionsData}\n selPluginResourceType={permissionPolicy.resourceType}\n conditionRulesData={\n conditionRulesData?.[`${plugin}`]?.[\n `${permissionPolicy.resourceType}`\n ]\n }\n />\n </>\n );\n};\n\nexport default PermissionPoliciesFormNestedRow;\n"],"names":["React"],"mappings":";;;;;;;;;;;;;AA8BA,MAAM,kCAAkC,CAAC;AAAA,EACvC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAuBM,KAAA;AACJ,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAA,cAAA,CAAM,SAAS,KAAK,CAAA;AAC1D,EAAM,MAAA,YAAA,GAAe,sBACnBA,cAAA,CAAA,aAAA,CAAC,KACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,SAAA,EAAU,GAAI,EAAA,KAAA,EAAM,QAAS,EAAA,EAAA,sGAGzC,CACF,CAAA;AAEF,EAAA,uBAEIA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,SAAU,EAAA,EAAA,KAAA,EAAM,MAAO,EAAA,EAAA,EAAI,EAAE,YAAA,EAAc,MAAQ,EAAA,KAAA,EAAO,OACzD,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,OAAS,EAAA,MAAA;AAAA,QACT,UAAY,EAAA;AAAA;AACd,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,UAAU,CAAK,CAAA,KAAA;AACb,UAAI,IAAA,CAAA,CAAE,OAAO,OAAS,EAAA;AACpB,YAAA,kBAAA;AAAA,cACE,MAAA;AAAA,cACA,gBAAiB,CAAA,UAAA;AAAA,cACjB,gBAAiB,CAAA,WAAA;AAAA,cACjB,gBAAiB,CAAA,OAAA;AAAA,cACjB,gBAAiB,CAAA;AAAA,aACnB;AAAA,WACK,MAAA;AACL,YAAA,kBAAA,CAAmB,wBAAwB,CAAA;AAAA;AAC7C,SACF;AAAA,QACA,SAAS,wBAA4B,IAAA;AAAA;AAAA,KACvC;AAAA,IACC,gBAAiB,CAAA,UAAA;AAAA,IACjB,iBAAiB,YAChB,mBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,CAAkB,eAAA,EAAA,gBAAA,CAAiB,YAAY,CAAA,CAAA;AAAA,QACtD,SAAU,EAAA;AAAA,OAAA;AAAA,sBAEVA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,YAAA,EAAW,MAAO,EAAA,IAAA,EAAK,OACjC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA,EAAE,MAEvC;AAAA,KAEA,GAAA;AAAA,GAER,CACA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,MAAA;AAAA,MACN,EAAI,EAAA;AAAA,QACF,OAAS,EAAA,MAAA;AAAA,QACT,YAAc,EAAA,MAAA;AAAA,QACd,KAAO,EAAA;AAAA;AACT,KAAA;AAAA,IAEC,QAAS,CAAA,GAAA,CAAI,CAAC,CAAA,EAAc,MAC3B,qBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA,EAAE,OAAS,EAAA,MAAA,EAAQ,YAAY,QAAS,EAAA;AAAA,QAC5C,KAAK,CAAG,EAAA,gBAAA,CAAiB,UAAU,CAAA,CAAA,EAAI,EAAE,MAAM,CAAA;AAAA,OAAA;AAAA,sBAE/CA,cAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,UAAU,CAAC,EAAA,EAAI,YACb,cAAe,CAAA,OAAA,EAAS,QAAQ,wBAAwB,CAAA;AAAA,UAE1D,OAAA,EAAS,EAAE,MAAW,KAAA,OAAA;AAAA,UACtB,UAAU,wBAA2B,GAAA;AAAA;AAAA,OACvC;AAAA,MACC,CAAE,CAAA;AAAA,KAEN;AAAA,GACH,+CACC,SAAU,EAAA,EAAA,KAAA,EAAM,SAAQ,EAAI,EAAA,EAAE,YAAc,EAAA,MAAA,EAAQ,KAAO,EAAA,KAAA,sBACzDA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,OAAO,YAAa,EAAA,EAAG,WAAU,KACxC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,SAAA,EAAU,MACpB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,QAAA;AAAA,MACX,IAAK,EAAA,OAAA;AAAA,MACL,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,MAClC,UACE,wBAA2B,GAAA,CAAA,IAC3B,CAAC,gBAAA,CAAiB,eAClB,CAAC,oBAAA;AAAA,MAEH,EAAI,EAAA;AAAA,QACF,WAAA,EAAa,EAAE,KAAO,EAAA,CAAA,KAAA,KAAS,MAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAE;AAAA;AACzD,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA,CAAC,SAAM,YAAc,EAAA,eAAA,EAAiB,OAAM,SAC1C,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,sBAAiB,CACpB,CAAA;AAAA,IAAQ;AAAA,GAGZ,CACF,CACF,CACF,CACA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,IAAM,EAAA,WAAA;AAAA,MACN,SAAS,MAAM;AACb,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,OACtB;AAAA,MACA,MAAA,EAAQ,CAAC,UAAgC,KAAA;AACvC,QAAA,eAAA,CAAgB,0BAA0B,UAAU,CAAA;AACpD,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,OACtB;AAAA,MACA,iBAAmB,EAAA,cAAA;AAAA,MACnB,uBAAuB,gBAAiB,CAAA,YAAA;AAAA,MACxC,kBAAA,EACE,qBAAqB,CAAG,EAAA,MAAM,EAAE,CAC9B,GAAA,CAAA,EAAG,gBAAiB,CAAA,YAAY,CAClC,CAAA;AAAA;AAAA,GAGN,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
2
|
import { useNavigate } from 'react-router-dom';
|
|
3
|
-
import { parseEntityRef } from '@backstage/catalog-model';
|
|
4
3
|
import { SimpleStepper, SimpleStepperStep } from '@backstage/core-components';
|
|
5
4
|
import { useApi } from '@backstage/core-plugin-api';
|
|
6
5
|
import Alert from '@mui/material/Alert';
|
|
@@ -15,12 +14,13 @@ import { useFormik } from 'formik';
|
|
|
15
14
|
import { rbacApiRef } from '../../api/RBACBackendClient.esm.js';
|
|
16
15
|
import { validationSchema, getRoleData, getPermissionPoliciesData, getNewConditionalPolicies, getRemovedConditionalPoliciesIds, getUpdatedConditionalPolicies, getConditionalPermissionPoliciesData } from '../../utils/create-role-utils.esm.js';
|
|
17
16
|
import { onlyInLeft, isSamePermissionPolicy } from '../../utils/rbac-utils.esm.js';
|
|
18
|
-
import { removePermissions, createPermissions, removeConditions, modifyConditions, createConditions } from '../../utils/role-form-utils.esm.js';
|
|
17
|
+
import { navigateTo, removePermissions, createPermissions, removeConditions, modifyConditions, createConditions } from '../../utils/role-form-utils.esm.js';
|
|
19
18
|
import { AddedMembersTable } from './AddedMembersTable.esm.js';
|
|
20
19
|
import { AddMembersForm } from './AddMembersForm.esm.js';
|
|
21
20
|
import { PermissionPoliciesForm } from './PermissionPoliciesForm.esm.js';
|
|
22
21
|
import { ReviewStep } from './ReviewStep.esm.js';
|
|
23
22
|
import { RoleDetailsForm } from './RoleDetailsForm.esm.js';
|
|
23
|
+
import CancelDialog from './CancelDialog.esm.js';
|
|
24
24
|
|
|
25
25
|
const RoleForm = ({
|
|
26
26
|
roleName,
|
|
@@ -31,22 +31,9 @@ const RoleForm = ({
|
|
|
31
31
|
initialValues
|
|
32
32
|
}) => {
|
|
33
33
|
const [activeStep, setActiveStep] = React__default.useState(step || 0);
|
|
34
|
+
const [openCancelDialog, setOpenCancelDialog] = React__default.useState(false);
|
|
34
35
|
const navigate = useNavigate();
|
|
35
36
|
const rbacApi = useApi(rbacApiRef);
|
|
36
|
-
const navigateTo = (rName, action) => {
|
|
37
|
-
const currentRoleName = rName || roleName;
|
|
38
|
-
const stateProp = currentRoleName && action ? {
|
|
39
|
-
state: {
|
|
40
|
-
toastMessage: `Role ${currentRoleName} ${action} successfully`
|
|
41
|
-
}
|
|
42
|
-
} : undefined;
|
|
43
|
-
if (step && currentRoleName) {
|
|
44
|
-
const { kind, namespace, name } = parseEntityRef(currentRoleName);
|
|
45
|
-
navigate(`../roles/${kind}/${namespace}/${name}`, stateProp);
|
|
46
|
-
} else {
|
|
47
|
-
navigate("..", stateProp);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
37
|
const updateRole = async (name, values, formikHelpers) => {
|
|
51
38
|
try {
|
|
52
39
|
const newData = getRoleData(values);
|
|
@@ -84,7 +71,7 @@ const RoleForm = ({
|
|
|
84
71
|
await removeConditions(deleteConditions, rbacApi);
|
|
85
72
|
await modifyConditions(updateConditions, rbacApi);
|
|
86
73
|
await createConditions(newConditions, rbacApi);
|
|
87
|
-
navigateTo(newName, "updated");
|
|
74
|
+
navigateTo(navigate, roleName, newName, "updated", step);
|
|
88
75
|
}
|
|
89
76
|
} catch (e) {
|
|
90
77
|
formikHelpers.setStatus({ submitError: e });
|
|
@@ -111,7 +98,7 @@ const RoleForm = ({
|
|
|
111
98
|
rbacApi,
|
|
112
99
|
"Role created successfully but unable to add conditions to the role."
|
|
113
100
|
);
|
|
114
|
-
navigateTo(newData.name, "created");
|
|
101
|
+
navigateTo(navigate, roleName, newData.name, "created", step);
|
|
115
102
|
} catch (e) {
|
|
116
103
|
formikHelpers.setStatus({ submitError: e });
|
|
117
104
|
}
|
|
@@ -161,9 +148,6 @@ const RoleForm = ({
|
|
|
161
148
|
return !!formik.values.selectedPlugins.length && formik.values.permissionPoliciesRows.filter((pp) => !!pp?.plugin).length === formik.values.permissionPoliciesRows.length && !formik.errors.selectedPlugins && (!formik.errors.permissionPoliciesRows || Array.isArray(formik.errors.permissionPoliciesRows) && formik.errors.permissionPoliciesRows?.filter((err) => !!err)?.length === 0);
|
|
162
149
|
};
|
|
163
150
|
const handleBack = () => setActiveStep(Math.max(activeStep - 1, 0));
|
|
164
|
-
const handleCancel = () => {
|
|
165
|
-
navigateTo();
|
|
166
|
-
};
|
|
167
151
|
const handleReset = (e) => {
|
|
168
152
|
setActiveStep(0);
|
|
169
153
|
formik.handleReset(e);
|
|
@@ -266,11 +250,19 @@ const RoleForm = ({
|
|
|
266
250
|
Button,
|
|
267
251
|
{
|
|
268
252
|
style: { position: "absolute", right: "2.75rem", bottom: "2.75rem" },
|
|
269
|
-
onClick:
|
|
253
|
+
onClick: () => setOpenCancelDialog(true),
|
|
270
254
|
color: "primary"
|
|
271
255
|
},
|
|
272
256
|
"Cancel"
|
|
273
257
|
)
|
|
258
|
+
), /* @__PURE__ */ React__default.createElement(
|
|
259
|
+
CancelDialog,
|
|
260
|
+
{
|
|
261
|
+
open: openCancelDialog,
|
|
262
|
+
editForm: !!roleName,
|
|
263
|
+
closeDialog: () => setOpenCancelDialog(false),
|
|
264
|
+
navigateTo: () => navigateTo(navigate, roleName, undefined, undefined, step)
|
|
265
|
+
}
|
|
274
266
|
));
|
|
275
267
|
};
|
|
276
268
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoleForm.esm.js","sources":["../../../src/components/CreateRole/RoleForm.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { SimpleStepper, SimpleStepperStep } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Divider from '@mui/material/Divider';\nimport Paper from '@mui/material/Paper';\nimport { FormikErrors, FormikHelpers, useFormik } from 'formik';\n\nimport { rbacApiRef } from '../../api/RBACBackendClient';\nimport { MemberEntity, PermissionsData, RoleError } from '../../types';\nimport {\n getConditionalPermissionPoliciesData,\n getNewConditionalPolicies,\n getPermissionPoliciesData,\n getRemovedConditionalPoliciesIds,\n getRoleData,\n getUpdatedConditionalPolicies,\n validationSchema,\n} from '../../utils/create-role-utils';\nimport { isSamePermissionPolicy, onlyInLeft } from '../../utils/rbac-utils';\nimport {\n createConditions,\n createPermissions,\n modifyConditions,\n removeConditions,\n removePermissions,\n} from '../../utils/role-form-utils';\nimport { AddedMembersTable } from './AddedMembersTable';\nimport { AddMembersForm } from './AddMembersForm';\nimport { PermissionPoliciesForm } from './PermissionPoliciesForm';\nimport { ReviewStep } from './ReviewStep';\nimport { RoleDetailsForm } from './RoleDetailsForm';\nimport { RoleFormValues } from './types';\n\ntype RoleFormProps = {\n membersData: { members: MemberEntity[]; loading: boolean; error: Error };\n titles: {\n formTitle: string;\n nameAndDescriptionTitle: string;\n usersAndGroupsTitle: string;\n permissionPoliciesTitle: string;\n };\n submitLabel?: string;\n roleName?: string;\n step?: number;\n initialValues: RoleFormValues;\n};\n\nexport const RoleForm = ({\n roleName,\n step,\n titles,\n membersData,\n submitLabel,\n initialValues,\n}: RoleFormProps) => {\n const [activeStep, setActiveStep] = React.useState<number>(step || 0);\n const navigate = useNavigate();\n const rbacApi = useApi(rbacApiRef);\n\n const navigateTo = (rName?: string, action?: string) => {\n const currentRoleName = rName || roleName;\n const stateProp =\n currentRoleName && action\n ? {\n state: {\n toastMessage: `Role ${currentRoleName} ${action} successfully`,\n },\n }\n : undefined;\n if (step && currentRoleName) {\n const { kind, namespace, name } = parseEntityRef(currentRoleName);\n navigate(`../roles/${kind}/${namespace}/${name}`, stateProp);\n } else {\n navigate('..', stateProp);\n }\n };\n\n const updateRole = async (\n name: string,\n values: RoleFormValues,\n formikHelpers: FormikHelpers<RoleFormValues>,\n ) => {\n try {\n const newData = getRoleData(values);\n const newName = newData.name;\n const newPermissionsData = getPermissionPoliciesData(values);\n const newConditions = getNewConditionalPolicies(values);\n const deleteConditions = getRemovedConditionalPoliciesIds(\n values,\n initialValues,\n );\n const updateConditions = getUpdatedConditionalPolicies(\n values,\n initialValues,\n );\n\n const oldData = getRoleData(initialValues);\n const res = await rbacApi.updateRole(oldData, newData);\n if ((res as RoleError).error) {\n throw new Error(\n `${'Unable to edit the role. '}${(res as RoleError).error.message}`,\n );\n } else {\n const oldPermissionsData = getPermissionPoliciesData(initialValues);\n const newPermissions = onlyInLeft(\n newPermissionsData,\n oldPermissionsData,\n isSamePermissionPolicy,\n );\n const deletePermissions = onlyInLeft(\n oldPermissionsData,\n newPermissionsData,\n isSamePermissionPolicy,\n );\n\n await removePermissions(name, deletePermissions, rbacApi);\n await createPermissions(newPermissions, rbacApi);\n\n await removeConditions(deleteConditions, rbacApi);\n await modifyConditions(updateConditions, rbacApi);\n await createConditions(newConditions, rbacApi);\n\n navigateTo(newName, 'updated');\n }\n } catch (e) {\n formikHelpers.setStatus({ submitError: e });\n }\n };\n\n const newRole = async (\n values: RoleFormValues,\n formikHelpers: FormikHelpers<RoleFormValues>,\n ) => {\n try {\n const newData = getRoleData(values);\n const newPermissionsData = getPermissionPoliciesData(values);\n const newConditionalPermissionPoliciesData =\n getConditionalPermissionPoliciesData(values);\n\n const res = await rbacApi.createRole(newData);\n if ((res as RoleError).error) {\n throw new Error(\n `${'Unable to create role. '}${(res as RoleError).error.message}`,\n );\n }\n\n await createPermissions(\n newPermissionsData,\n rbacApi,\n 'Role was created successfully but unable to add permission policies to the role.',\n );\n\n await createConditions(\n newConditionalPermissionPoliciesData,\n rbacApi,\n 'Role created successfully but unable to add conditions to the role.',\n );\n\n navigateTo(newData.name, 'created');\n } catch (e) {\n formikHelpers.setStatus({ submitError: e });\n }\n };\n\n const formik = useFormik<RoleFormValues>({\n enableReinitialize: true,\n initialValues,\n validationSchema: validationSchema,\n onSubmit: async (\n values: RoleFormValues,\n formikHelpers: FormikHelpers<RoleFormValues>,\n ) => {\n if (roleName) {\n updateRole(roleName, values, formikHelpers);\n } else {\n newRole(values, formikHelpers);\n }\n },\n });\n\n const validateStepField = (fieldName: string) => {\n switch (fieldName) {\n case 'name': {\n formik.validateField(fieldName);\n return formik.errors.name;\n }\n case 'selectedMembers': {\n formik.validateField(fieldName);\n return formik.errors.selectedMembers;\n }\n case 'permissionPoliciesRows': {\n formik.values.permissionPoliciesRows.forEach((_pp, index) => {\n formik.validateField(`permissionPoliciesRows[${index}].plugin`);\n formik.validateField(`permissionPoliciesRows[${index}].permission`);\n });\n return formik.errors.permissionPoliciesRows;\n }\n default:\n return undefined;\n }\n };\n\n const handleNext = (fieldName?: string) => {\n const error = fieldName && validateStepField(fieldName);\n if (!fieldName || !error) {\n formik.setErrors({});\n const stepNum = Math.min(activeStep + 1, 3);\n setActiveStep(stepNum);\n }\n };\n\n const canNextPermissionPoliciesStep = () => {\n return (\n !!formik.values.selectedPlugins.length &&\n formik.values.permissionPoliciesRows.filter(pp => !!pp?.plugin).length ===\n formik.values.permissionPoliciesRows.length &&\n !formik.errors.selectedPlugins &&\n (!formik.errors.permissionPoliciesRows ||\n (Array.isArray(formik.errors.permissionPoliciesRows) &&\n (\n formik.errors.permissionPoliciesRows as unknown as FormikErrors<\n PermissionsData[]\n >[]\n )?.filter(err => !!err)?.length === 0))\n );\n };\n\n const handleBack = () => setActiveStep(Math.max(activeStep - 1, 0));\n const handleCancel = () => {\n navigateTo();\n };\n\n const handleReset = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setActiveStep(0);\n formik.handleReset(e);\n };\n\n return (\n <Card style={{ overflow: 'auto' }}>\n <CardHeader title={titles.formTitle} />\n <Divider />\n <CardContent\n component=\"form\"\n onSubmit={formik.handleSubmit}\n style={{ position: 'relative' }}\n >\n <SimpleStepper activeStep={activeStep}>\n <SimpleStepperStep\n title={titles.nameAndDescriptionTitle}\n actions={{\n showBack: false,\n showNext: true,\n nextText: 'Next',\n canNext: () => !!formik.values.name && !formik.errors.name,\n onNext: () => handleNext('name'),\n }}\n >\n <RoleDetailsForm\n name={formik.values.name}\n description={formik.values.description}\n handleBlur={formik.handleBlur}\n handleChange={formik.handleChange}\n nameError={formik.errors.name}\n />\n </SimpleStepperStep>\n <SimpleStepperStep\n title={titles.usersAndGroupsTitle}\n actions={{\n showNext: true,\n nextText: 'Next',\n canNext: () =>\n formik.values.selectedMembers?.length > 0 &&\n !formik.errors.selectedMembers,\n onNext: () => handleNext('selectedMembers'),\n showBack: true,\n backText: 'Back',\n onBack: handleBack,\n }}\n >\n <Box>\n <AddMembersForm\n selectedMembers={formik.values.selectedMembers}\n selectedMembersError={formik.errors.selectedMembers as string}\n setFieldValue={formik.setFieldValue}\n membersData={membersData}\n />\n <br />\n <AddedMembersTable\n selectedMembers={formik.values.selectedMembers}\n setFieldValue={formik.setFieldValue}\n />\n </Box>\n </SimpleStepperStep>\n <SimpleStepperStep\n title={titles.permissionPoliciesTitle}\n actions={{\n showNext: true,\n nextText: 'Next',\n canNext: () => canNextPermissionPoliciesStep(),\n onNext: () => handleNext('permissionPoliciesRows'),\n showBack: true,\n backText: 'Back',\n onBack: handleBack,\n }}\n >\n <PermissionPoliciesForm\n permissionPoliciesRows={formik.values.permissionPoliciesRows}\n selectedPlugins={formik.values.selectedPlugins}\n selectedPluginsError={\n formik.errors.selectedPlugins as FormikErrors<string>\n }\n setFieldValue={formik.setFieldValue}\n setFieldError={formik.setFieldError}\n handleBlur={formik.handleBlur}\n />\n </SimpleStepperStep>\n <SimpleStepperStep title=\"\" end>\n <Paper square elevation={0}>\n <ReviewStep values={formik.values} isEditing={!!roleName} />\n <br />\n <Button onClick={handleBack}>Back</Button>\n <Button onClick={e => handleReset(e)}>Reset</Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={\n !!formik.errors.name ||\n !!formik.errors.selectedMembers ||\n !formik.dirty\n }\n >\n {submitLabel || 'Create'}\n </Button>\n </Paper>\n </SimpleStepperStep>\n </SimpleStepper>\n {formik.status?.submitError && (\n <Box style={{ paddingBottom: '16px' }}>\n <Alert severity=\"error\">{`${formik.status.submitError}`}</Alert>\n </Box>\n )}\n <Button\n style={{ position: 'absolute', right: '2.75rem', bottom: '2.75rem' }}\n onClick={handleCancel}\n color=\"primary\"\n >\n Cancel\n </Button>\n </CardContent>\n </Card>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RoleForm.esm.js","sources":["../../../src/components/CreateRole/RoleForm.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { SimpleStepper, SimpleStepperStep } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Divider from '@mui/material/Divider';\nimport Paper from '@mui/material/Paper';\nimport { FormikErrors, FormikHelpers, useFormik } from 'formik';\n\nimport { rbacApiRef } from '../../api/RBACBackendClient';\nimport { MemberEntity, PermissionsData, RoleError } from '../../types';\nimport {\n getConditionalPermissionPoliciesData,\n getNewConditionalPolicies,\n getPermissionPoliciesData,\n getRemovedConditionalPoliciesIds,\n getRoleData,\n getUpdatedConditionalPolicies,\n validationSchema,\n} from '../../utils/create-role-utils';\nimport { isSamePermissionPolicy, onlyInLeft } from '../../utils/rbac-utils';\nimport {\n createConditions,\n createPermissions,\n modifyConditions,\n navigateTo,\n removeConditions,\n removePermissions,\n} from '../../utils/role-form-utils';\nimport { AddedMembersTable } from './AddedMembersTable';\nimport { AddMembersForm } from './AddMembersForm';\nimport { PermissionPoliciesForm } from './PermissionPoliciesForm';\nimport { ReviewStep } from './ReviewStep';\nimport { RoleDetailsForm } from './RoleDetailsForm';\nimport { RoleFormValues } from './types';\nimport CancelDialog from './CancelDialog';\n\ntype RoleFormProps = {\n membersData: { members: MemberEntity[]; loading: boolean; error: Error };\n titles: {\n formTitle: string;\n nameAndDescriptionTitle: string;\n usersAndGroupsTitle: string;\n permissionPoliciesTitle: string;\n };\n submitLabel?: string;\n roleName?: string;\n step?: number;\n initialValues: RoleFormValues;\n};\n\nexport const RoleForm = ({\n roleName,\n step,\n titles,\n membersData,\n submitLabel,\n initialValues,\n}: RoleFormProps) => {\n const [activeStep, setActiveStep] = React.useState<number>(step || 0);\n const [openCancelDialog, setOpenCancelDialog] =\n React.useState<boolean>(false);\n const navigate = useNavigate();\n const rbacApi = useApi(rbacApiRef);\n\n const updateRole = async (\n name: string,\n values: RoleFormValues,\n formikHelpers: FormikHelpers<RoleFormValues>,\n ) => {\n try {\n const newData = getRoleData(values);\n const newName = newData.name;\n const newPermissionsData = getPermissionPoliciesData(values);\n const newConditions = getNewConditionalPolicies(values);\n const deleteConditions = getRemovedConditionalPoliciesIds(\n values,\n initialValues,\n );\n const updateConditions = getUpdatedConditionalPolicies(\n values,\n initialValues,\n );\n\n const oldData = getRoleData(initialValues);\n const res = await rbacApi.updateRole(oldData, newData);\n if ((res as RoleError).error) {\n throw new Error(\n `${'Unable to edit the role. '}${(res as RoleError).error.message}`,\n );\n } else {\n const oldPermissionsData = getPermissionPoliciesData(initialValues);\n const newPermissions = onlyInLeft(\n newPermissionsData,\n oldPermissionsData,\n isSamePermissionPolicy,\n );\n const deletePermissions = onlyInLeft(\n oldPermissionsData,\n newPermissionsData,\n isSamePermissionPolicy,\n );\n\n await removePermissions(name, deletePermissions, rbacApi);\n await createPermissions(newPermissions, rbacApi);\n\n await removeConditions(deleteConditions, rbacApi);\n await modifyConditions(updateConditions, rbacApi);\n await createConditions(newConditions, rbacApi);\n\n navigateTo(navigate, roleName, newName, 'updated', step);\n }\n } catch (e) {\n formikHelpers.setStatus({ submitError: e });\n }\n };\n\n const newRole = async (\n values: RoleFormValues,\n formikHelpers: FormikHelpers<RoleFormValues>,\n ) => {\n try {\n const newData = getRoleData(values);\n const newPermissionsData = getPermissionPoliciesData(values);\n const newConditionalPermissionPoliciesData =\n getConditionalPermissionPoliciesData(values);\n\n const res = await rbacApi.createRole(newData);\n if ((res as RoleError).error) {\n throw new Error(\n `${'Unable to create role. '}${(res as RoleError).error.message}`,\n );\n }\n\n await createPermissions(\n newPermissionsData,\n rbacApi,\n 'Role was created successfully but unable to add permission policies to the role.',\n );\n\n await createConditions(\n newConditionalPermissionPoliciesData,\n rbacApi,\n 'Role created successfully but unable to add conditions to the role.',\n );\n\n navigateTo(navigate, roleName, newData.name, 'created', step);\n } catch (e) {\n formikHelpers.setStatus({ submitError: e });\n }\n };\n\n const formik = useFormik<RoleFormValues>({\n enableReinitialize: true,\n initialValues,\n validationSchema: validationSchema,\n onSubmit: async (\n values: RoleFormValues,\n formikHelpers: FormikHelpers<RoleFormValues>,\n ) => {\n if (roleName) {\n updateRole(roleName, values, formikHelpers);\n } else {\n newRole(values, formikHelpers);\n }\n },\n });\n\n const validateStepField = (fieldName: string) => {\n switch (fieldName) {\n case 'name': {\n formik.validateField(fieldName);\n return formik.errors.name;\n }\n case 'selectedMembers': {\n formik.validateField(fieldName);\n return formik.errors.selectedMembers;\n }\n case 'permissionPoliciesRows': {\n formik.values.permissionPoliciesRows.forEach((_pp, index) => {\n formik.validateField(`permissionPoliciesRows[${index}].plugin`);\n formik.validateField(`permissionPoliciesRows[${index}].permission`);\n });\n return formik.errors.permissionPoliciesRows;\n }\n default:\n return undefined;\n }\n };\n\n const handleNext = (fieldName?: string) => {\n const error = fieldName && validateStepField(fieldName);\n if (!fieldName || !error) {\n formik.setErrors({});\n const stepNum = Math.min(activeStep + 1, 3);\n setActiveStep(stepNum);\n }\n };\n\n const canNextPermissionPoliciesStep = () => {\n return (\n !!formik.values.selectedPlugins.length &&\n formik.values.permissionPoliciesRows.filter(pp => !!pp?.plugin).length ===\n formik.values.permissionPoliciesRows.length &&\n !formik.errors.selectedPlugins &&\n (!formik.errors.permissionPoliciesRows ||\n (Array.isArray(formik.errors.permissionPoliciesRows) &&\n (\n formik.errors.permissionPoliciesRows as unknown as FormikErrors<\n PermissionsData[]\n >[]\n )?.filter(err => !!err)?.length === 0))\n );\n };\n\n const handleBack = () => setActiveStep(Math.max(activeStep - 1, 0));\n\n const handleReset = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setActiveStep(0);\n formik.handleReset(e);\n };\n\n return (\n <Card style={{ overflow: 'auto' }}>\n <CardHeader title={titles.formTitle} />\n <Divider />\n <CardContent\n component=\"form\"\n onSubmit={formik.handleSubmit}\n style={{ position: 'relative' }}\n >\n <SimpleStepper activeStep={activeStep}>\n <SimpleStepperStep\n title={titles.nameAndDescriptionTitle}\n actions={{\n showBack: false,\n showNext: true,\n nextText: 'Next',\n canNext: () => !!formik.values.name && !formik.errors.name,\n onNext: () => handleNext('name'),\n }}\n >\n <RoleDetailsForm\n name={formik.values.name}\n description={formik.values.description}\n handleBlur={formik.handleBlur}\n handleChange={formik.handleChange}\n nameError={formik.errors.name}\n />\n </SimpleStepperStep>\n <SimpleStepperStep\n title={titles.usersAndGroupsTitle}\n actions={{\n showNext: true,\n nextText: 'Next',\n canNext: () =>\n formik.values.selectedMembers?.length > 0 &&\n !formik.errors.selectedMembers,\n onNext: () => handleNext('selectedMembers'),\n showBack: true,\n backText: 'Back',\n onBack: handleBack,\n }}\n >\n <Box>\n <AddMembersForm\n selectedMembers={formik.values.selectedMembers}\n selectedMembersError={formik.errors.selectedMembers as string}\n setFieldValue={formik.setFieldValue}\n membersData={membersData}\n />\n <br />\n <AddedMembersTable\n selectedMembers={formik.values.selectedMembers}\n setFieldValue={formik.setFieldValue}\n />\n </Box>\n </SimpleStepperStep>\n <SimpleStepperStep\n title={titles.permissionPoliciesTitle}\n actions={{\n showNext: true,\n nextText: 'Next',\n canNext: () => canNextPermissionPoliciesStep(),\n onNext: () => handleNext('permissionPoliciesRows'),\n showBack: true,\n backText: 'Back',\n onBack: handleBack,\n }}\n >\n <PermissionPoliciesForm\n permissionPoliciesRows={formik.values.permissionPoliciesRows}\n selectedPlugins={formik.values.selectedPlugins}\n selectedPluginsError={\n formik.errors.selectedPlugins as FormikErrors<string>\n }\n setFieldValue={formik.setFieldValue}\n setFieldError={formik.setFieldError}\n handleBlur={formik.handleBlur}\n />\n </SimpleStepperStep>\n <SimpleStepperStep title=\"\" end>\n <Paper square elevation={0}>\n <ReviewStep values={formik.values} isEditing={!!roleName} />\n <br />\n <Button onClick={handleBack}>Back</Button>\n <Button onClick={e => handleReset(e)}>Reset</Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={\n !!formik.errors.name ||\n !!formik.errors.selectedMembers ||\n !formik.dirty\n }\n >\n {submitLabel || 'Create'}\n </Button>\n </Paper>\n </SimpleStepperStep>\n </SimpleStepper>\n {formik.status?.submitError && (\n <Box style={{ paddingBottom: '16px' }}>\n <Alert severity=\"error\">{`${formik.status.submitError}`}</Alert>\n </Box>\n )}\n <Button\n style={{ position: 'absolute', right: '2.75rem', bottom: '2.75rem' }}\n onClick={() => setOpenCancelDialog(true)}\n color=\"primary\"\n >\n Cancel\n </Button>\n </CardContent>\n <CancelDialog\n open={openCancelDialog}\n editForm={!!roleName}\n closeDialog={() => setOpenCancelDialog(false)}\n navigateTo={() =>\n navigateTo(navigate, roleName, undefined, undefined, step)\n }\n />\n </Card>\n );\n};\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { parseEntityRef } from '@backstage/catalog-model';
|
|
2
|
+
|
|
1
3
|
const createPermissions = async (newPermissions, rbacApi, errorMsgPrefix) => {
|
|
2
4
|
if (newPermissions.length > 0) {
|
|
3
5
|
const permissionsRes = await rbacApi.createPolicies(newPermissions);
|
|
@@ -61,6 +63,20 @@ const createConditions = async (newConditions, rbacApi, errorMsgPrefix) => {
|
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
};
|
|
66
|
+
const navigateTo = (navigate, roleName, rName, action, step) => {
|
|
67
|
+
const currentRoleName = rName || roleName;
|
|
68
|
+
const stateProp = currentRoleName && action ? {
|
|
69
|
+
state: {
|
|
70
|
+
toastMessage: `Role ${currentRoleName} ${action} successfully`
|
|
71
|
+
}
|
|
72
|
+
} : undefined;
|
|
73
|
+
if (step && currentRoleName) {
|
|
74
|
+
const { kind, namespace, name } = parseEntityRef(currentRoleName);
|
|
75
|
+
navigate(`../roles/${kind}/${namespace}/${name}`, stateProp);
|
|
76
|
+
} else {
|
|
77
|
+
navigate("..", stateProp);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
64
80
|
|
|
65
|
-
export { createConditions, createPermissions, modifyConditions, removeConditions, removePermissions };
|
|
81
|
+
export { createConditions, createPermissions, modifyConditions, navigateTo, removeConditions, removePermissions };
|
|
66
82
|
//# sourceMappingURL=role-form-utils.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-form-utils.esm.js","sources":["../../src/utils/role-form-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { RoleBasedPolicy } from '@backstage-community/plugin-rbac-common';\n\nimport { RBACAPI } from '../api/RBACBackendClient';\nimport {\n RoleBasedConditions,\n RoleError,\n UpdatedConditionsData,\n} from '../types';\n\nexport const createPermissions = async (\n newPermissions: RoleBasedPolicy[],\n rbacApi: RBACAPI,\n errorMsgPrefix?: string,\n) => {\n if (newPermissions.length > 0) {\n const permissionsRes = await rbacApi.createPolicies(newPermissions);\n if ((permissionsRes as unknown as RoleError).error) {\n throw new Error(\n `${errorMsgPrefix || 'Unable to create the permission policies.'} ${\n (permissionsRes as unknown as RoleError).error.message\n }`,\n );\n }\n }\n};\n\nexport const removePermissions = async (\n name: string,\n deletePermissions: RoleBasedPolicy[],\n rbacApi: RBACAPI,\n) => {\n if (deletePermissions.length > 0) {\n const permissionsRes = await rbacApi.deletePolicies(\n name,\n deletePermissions,\n );\n if ((permissionsRes as unknown as RoleError).error) {\n throw new Error(\n `Unable to delete the permission policies. ${\n (permissionsRes as unknown as RoleError).error.message\n }`,\n );\n }\n }\n};\n\nexport const removeConditions = async (\n deleteConditions: number[],\n rbacApi: RBACAPI,\n) => {\n if (deleteConditions.length > 0) {\n const promises = deleteConditions.map(cid =>\n rbacApi.deleteConditionalPolicies(cid),\n );\n\n const cppRes: (Response | RoleError)[] = await Promise.all(promises);\n const cpErr = cppRes\n .map(r => (r as unknown as RoleError).error?.message)\n .filter(m => m);\n\n if (cpErr.length > 0) {\n throw new Error(\n `Unable to remove conditions from the role. ${cpErr.join('\\n')}`,\n );\n }\n }\n};\n\nexport const modifyConditions = async (\n updateConditions: UpdatedConditionsData,\n rbacApi: RBACAPI,\n) => {\n if (updateConditions.length > 0) {\n const promises = updateConditions.map(({ id, updateCondition }) =>\n rbacApi.updateConditionalPolicies(id, updateCondition),\n );\n\n const cppRes: (Response | RoleError)[] = await Promise.all(promises);\n const cpErr = cppRes\n .map(r => (r as unknown as RoleError).error?.message)\n .filter(m => m);\n\n if (cpErr.length > 0) {\n throw new Error(`Unable to update conditions. ${cpErr.join('\\n')}`);\n }\n }\n};\n\nexport const createConditions = async (\n newConditions: RoleBasedConditions[],\n rbacApi: RBACAPI,\n errorMsgPrefix?: string,\n) => {\n if (newConditions.length > 0) {\n const promises = newConditions.map(cpp =>\n rbacApi.createConditionalPermission(cpp),\n );\n\n const cppRes: (Response | RoleError)[] = await Promise.all(promises);\n const cpErr = cppRes\n .map(r => (r as unknown as RoleError).error?.message)\n .filter(m => m);\n\n if (cpErr.length > 0) {\n throw new Error(\n `${\n errorMsgPrefix || 'Unable to add conditions to the role.'\n } ${cpErr.join('\\n')}`,\n );\n }\n }\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"role-form-utils.esm.js","sources":["../../src/utils/role-form-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { RoleBasedPolicy } from '@backstage-community/plugin-rbac-common';\nimport { parseEntityRef } from '@backstage/catalog-model';\n\nimport { RBACAPI } from '../api/RBACBackendClient';\nimport {\n RoleBasedConditions,\n RoleError,\n UpdatedConditionsData,\n} from '../types';\nimport { NavigateFunction } from 'react-router-dom';\n\nexport const createPermissions = async (\n newPermissions: RoleBasedPolicy[],\n rbacApi: RBACAPI,\n errorMsgPrefix?: string,\n) => {\n if (newPermissions.length > 0) {\n const permissionsRes = await rbacApi.createPolicies(newPermissions);\n if ((permissionsRes as unknown as RoleError).error) {\n throw new Error(\n `${errorMsgPrefix || 'Unable to create the permission policies.'} ${\n (permissionsRes as unknown as RoleError).error.message\n }`,\n );\n }\n }\n};\n\nexport const removePermissions = async (\n name: string,\n deletePermissions: RoleBasedPolicy[],\n rbacApi: RBACAPI,\n) => {\n if (deletePermissions.length > 0) {\n const permissionsRes = await rbacApi.deletePolicies(\n name,\n deletePermissions,\n );\n if ((permissionsRes as unknown as RoleError).error) {\n throw new Error(\n `Unable to delete the permission policies. ${\n (permissionsRes as unknown as RoleError).error.message\n }`,\n );\n }\n }\n};\n\nexport const removeConditions = async (\n deleteConditions: number[],\n rbacApi: RBACAPI,\n) => {\n if (deleteConditions.length > 0) {\n const promises = deleteConditions.map(cid =>\n rbacApi.deleteConditionalPolicies(cid),\n );\n\n const cppRes: (Response | RoleError)[] = await Promise.all(promises);\n const cpErr = cppRes\n .map(r => (r as unknown as RoleError).error?.message)\n .filter(m => m);\n\n if (cpErr.length > 0) {\n throw new Error(\n `Unable to remove conditions from the role. ${cpErr.join('\\n')}`,\n );\n }\n }\n};\n\nexport const modifyConditions = async (\n updateConditions: UpdatedConditionsData,\n rbacApi: RBACAPI,\n) => {\n if (updateConditions.length > 0) {\n const promises = updateConditions.map(({ id, updateCondition }) =>\n rbacApi.updateConditionalPolicies(id, updateCondition),\n );\n\n const cppRes: (Response | RoleError)[] = await Promise.all(promises);\n const cpErr = cppRes\n .map(r => (r as unknown as RoleError).error?.message)\n .filter(m => m);\n\n if (cpErr.length > 0) {\n throw new Error(`Unable to update conditions. ${cpErr.join('\\n')}`);\n }\n }\n};\n\nexport const createConditions = async (\n newConditions: RoleBasedConditions[],\n rbacApi: RBACAPI,\n errorMsgPrefix?: string,\n) => {\n if (newConditions.length > 0) {\n const promises = newConditions.map(cpp =>\n rbacApi.createConditionalPermission(cpp),\n );\n\n const cppRes: (Response | RoleError)[] = await Promise.all(promises);\n const cpErr = cppRes\n .map(r => (r as unknown as RoleError).error?.message)\n .filter(m => m);\n\n if (cpErr.length > 0) {\n throw new Error(\n `${\n errorMsgPrefix || 'Unable to add conditions to the role.'\n } ${cpErr.join('\\n')}`,\n );\n }\n }\n};\n\nexport const navigateTo = (\n navigate: NavigateFunction,\n roleName?: string,\n rName?: string,\n action?: string,\n step?: number,\n) => {\n const currentRoleName = rName || roleName;\n const stateProp =\n currentRoleName && action\n ? {\n state: {\n toastMessage: `Role ${currentRoleName} ${action} successfully`,\n },\n }\n : undefined;\n if (step && currentRoleName) {\n const { kind, namespace, name } = parseEntityRef(currentRoleName);\n navigate(`../roles/${kind}/${namespace}/${name}`, stateProp);\n } else {\n navigate('..', stateProp);\n }\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage-community/plugin-rbac",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.38.0",
|
|
4
4
|
"main": "dist/index.esm.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@backstage/plugin-permission-common": "^0.8.4",
|
|
46
46
|
"@backstage/plugin-permission-react": "^0.4.30",
|
|
47
47
|
"@backstage/theme": "^0.6.3",
|
|
48
|
-
"@janus-idp/shared-react": "^2.
|
|
48
|
+
"@janus-idp/shared-react": "^2.16.0",
|
|
49
49
|
"@mui/icons-material": "5.16.4",
|
|
50
50
|
"@mui/material": "^5.14.18",
|
|
51
51
|
"@mui/styles": "^6.1.7",
|