@backstage-community/plugin-rbac 1.33.1 → 1.33.2
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 +7 -0
- package/{app-config.yaml → app-config.dynamic.yaml} +0 -2
- package/dist/components/RoleOverview/MembersCard.esm.js +9 -7
- package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
- package/dist/components/RoleOverview/PermissionsCard.esm.js +16 -14
- package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
- package/dist/components/RolesList/RolesList.esm.js +9 -7
- package/dist/components/RolesList/RolesList.esm.js.map +1 -1
- package/dist/utils/filter-table-data.esm.js +21 -0
- package/dist/utils/filter-table-data.esm.js.map +1 -0
- package/package.json +3 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 1.33.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c3fe880: - fix: remove empty summary row
|
|
8
|
+
- fix: remove `@janus-idp/cli` / `scalprum` configuration from `package.json`. Users that build and install the plugin from the source code must change their app-config.yaml from `janus-idp.backstage-plugin-rbac` to `backstage-community.plugin-rbac` and drop the module parameter. This matches now other plugins we migrated from the Janus IDP community to the Backstage community plugin and was missed before.
|
|
9
|
+
|
|
3
10
|
## 1.33.1
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -7,6 +7,7 @@ import Box from '@mui/material/Box';
|
|
|
7
7
|
import Card from '@mui/material/Card';
|
|
8
8
|
import CardContent from '@mui/material/CardContent';
|
|
9
9
|
import { policyEntityUpdatePermission } from '@backstage-community/plugin-rbac-common';
|
|
10
|
+
import { filterTableData } from '../../utils/filter-table-data.esm.js';
|
|
10
11
|
import { getMembers } from '../../utils/rbac-utils.esm.js';
|
|
11
12
|
import EditRole from '../EditRole.esm.js';
|
|
12
13
|
import { columns } from './MembersListColumns.esm.js';
|
|
@@ -26,7 +27,7 @@ const getEditIcon = (isAllowed, roleName) => {
|
|
|
26
27
|
};
|
|
27
28
|
const MembersCard = ({ roleName, membersInfo }) => {
|
|
28
29
|
const { data, loading, retry, error, canReadUsersAndGroups } = membersInfo;
|
|
29
|
-
const [
|
|
30
|
+
const [searchText, setSearchText] = React.useState();
|
|
30
31
|
const policyEntityPermissionResult = usePermission({
|
|
31
32
|
permission: policyEntityUpdatePermission,
|
|
32
33
|
resourceRef: policyEntityUpdatePermission.resourceType
|
|
@@ -52,9 +53,10 @@ const MembersCard = ({ roleName, membersInfo }) => {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
];
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
const filteredData = React.useMemo(
|
|
57
|
+
() => filterTableData({ data, columns, searchText }),
|
|
58
|
+
[data, searchText]
|
|
59
|
+
);
|
|
58
60
|
return /* @__PURE__ */ React.createElement(Card, null, /* @__PURE__ */ React.createElement(CardContent, null, !loading && error && /* @__PURE__ */ React.createElement("div", { style: { paddingBottom: "16px" } }, /* @__PURE__ */ React.createElement(
|
|
59
61
|
WarningPanel,
|
|
60
62
|
{
|
|
@@ -65,9 +67,8 @@ const MembersCard = ({ roleName, membersInfo }) => {
|
|
|
65
67
|
)), /* @__PURE__ */ React.createElement(
|
|
66
68
|
Table,
|
|
67
69
|
{
|
|
68
|
-
title: !loading && data?.length ? `Users and groups (${getMembers(
|
|
70
|
+
title: !loading && data?.length ? `Users and groups (${getMembers(filteredData)})` : "Users and groups",
|
|
69
71
|
actions,
|
|
70
|
-
renderSummaryRow: (summary) => onSearchResultsChange(summary.data),
|
|
71
72
|
options: { padding: "default", search: true, paging: true },
|
|
72
73
|
data: data ?? [],
|
|
73
74
|
isLoading: loading,
|
|
@@ -79,7 +80,8 @@ const MembersCard = ({ roleName, membersInfo }) => {
|
|
|
79
80
|
sx: { display: "flex", justifyContent: "center", p: 2 }
|
|
80
81
|
},
|
|
81
82
|
"No records found"
|
|
82
|
-
)
|
|
83
|
+
),
|
|
84
|
+
onSearchChange: setSearchText
|
|
83
85
|
}
|
|
84
86
|
)));
|
|
85
87
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MembersCard.esm.js","sources":["../../../src/components/RoleOverview/MembersCard.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Table, WarningPanel } from '@backstage/core-components';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\n\nimport { policyEntityUpdatePermission } from '@backstage-community/plugin-rbac-common';\n\nimport { MembersInfo } from '../../hooks/useMembers';\nimport {
|
|
1
|
+
{"version":3,"file":"MembersCard.esm.js","sources":["../../../src/components/RoleOverview/MembersCard.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Table, WarningPanel } from '@backstage/core-components';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\n\nimport { policyEntityUpdatePermission } from '@backstage-community/plugin-rbac-common';\n\nimport { MembersInfo } from '../../hooks/useMembers';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport { columns } from './MembersListColumns';\n\ntype MembersCardProps = {\n roleName: string;\n membersInfo: MembersInfo;\n};\n\nconst getRefreshIcon = () => <CachedIcon />;\nconst getEditIcon = (isAllowed: boolean, roleName: string) => {\n const { kind, name, namespace } = parseEntityRef(roleName);\n\n return (\n <EditRole\n dataTestId={isAllowed ? 'update-members' : 'disable-update-members'}\n roleName={roleName}\n disable={!isAllowed}\n to={`../../role/${kind}/${namespace}/${name}?activeStep=${1}`}\n />\n );\n};\n\nexport const MembersCard = ({ roleName, membersInfo }: MembersCardProps) => {\n const { data, loading, retry, error, canReadUsersAndGroups } = membersInfo;\n const [searchText, setSearchText] = React.useState<string>();\n const policyEntityPermissionResult = usePermission({\n permission: policyEntityUpdatePermission,\n resourceRef: policyEntityUpdatePermission.resourceType,\n });\n\n const actions = [\n {\n icon: getRefreshIcon,\n tooltip: 'Refresh',\n isFreeAction: true,\n onClick: () => {\n retry.roleRetry();\n retry.membersRetry();\n },\n },\n {\n icon: () =>\n getEditIcon(\n policyEntityPermissionResult.allowed && canReadUsersAndGroups,\n roleName,\n ),\n tooltip:\n policyEntityPermissionResult.allowed && canReadUsersAndGroups\n ? 'Edit'\n : 'Unauthorized to edit',\n isFreeAction: true,\n onClick: () => {},\n },\n ];\n\n const filteredData = React.useMemo(\n () => filterTableData({ data, columns, searchText }),\n [data, searchText],\n );\n\n return (\n <Card>\n <CardContent>\n {!loading && error && (\n <div style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={(error as Error)?.message || (error as Error)?.name}\n title=\"Something went wrong while fetching the users and groups\"\n severity=\"error\"\n />\n </div>\n )}\n <Table\n title={\n !loading && data?.length\n ? `Users and groups (${getMembers(filteredData)})`\n : 'Users and groups'\n }\n actions={actions}\n options={{ padding: 'default', search: true, paging: true }}\n data={data ?? []}\n isLoading={loading}\n columns={columns}\n emptyContent={\n <Box\n data-testid=\"members-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import Card from '@mui/material/Card';
|
|
|
8
8
|
import CardContent from '@mui/material/CardContent';
|
|
9
9
|
import { policyEntityUpdatePermission } from '@backstage-community/plugin-rbac-common';
|
|
10
10
|
import { usePermissionPolicies } from '../../hooks/usePermissionPolicies.esm.js';
|
|
11
|
+
import { filterTableData } from '../../utils/filter-table-data.esm.js';
|
|
11
12
|
import EditRole from '../EditRole.esm.js';
|
|
12
13
|
import { columns } from './PermissionsListColumns.esm.js';
|
|
13
14
|
|
|
@@ -29,22 +30,23 @@ const PermissionsCard = ({
|
|
|
29
30
|
canReadUsersAndGroups
|
|
30
31
|
}) => {
|
|
31
32
|
const { data, loading, retry, error } = usePermissionPolicies(entityReference);
|
|
32
|
-
const [
|
|
33
|
+
const [searchText, setSearchText] = React.useState();
|
|
33
34
|
const permissionResult = usePermission({
|
|
34
35
|
permission: policyEntityUpdatePermission,
|
|
35
36
|
resourceRef: policyEntityUpdatePermission.resourceType
|
|
36
37
|
});
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
const numberOfPolicies = React.useMemo(() => {
|
|
39
|
+
const filteredPermissions = filterTableData({ data, columns, searchText });
|
|
40
|
+
let policies = 0;
|
|
41
|
+
filteredPermissions.forEach((p) => {
|
|
42
|
+
if (p.conditions) {
|
|
43
|
+
policies++;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
policies += p.policies.filter((pol) => pol.effect === "allow").length;
|
|
47
|
+
});
|
|
48
|
+
return policies;
|
|
49
|
+
}, [data, searchText]);
|
|
48
50
|
const actions = [
|
|
49
51
|
{
|
|
50
52
|
icon: getRefreshIcon,
|
|
@@ -79,7 +81,6 @@ const PermissionsCard = ({
|
|
|
79
81
|
{
|
|
80
82
|
title: !loading && data.length > 0 ? `Permission Policies (${numberOfPolicies})` : "Permission Policies",
|
|
81
83
|
actions,
|
|
82
|
-
renderSummaryRow: (summary) => onSearchResultsChange(summary.data),
|
|
83
84
|
options: { padding: "default", search: true, paging: true },
|
|
84
85
|
data,
|
|
85
86
|
columns,
|
|
@@ -91,7 +92,8 @@ const PermissionsCard = ({
|
|
|
91
92
|
sx: { display: "flex", justifyContent: "center", p: 2 }
|
|
92
93
|
},
|
|
93
94
|
"No records found"
|
|
94
|
-
)
|
|
95
|
+
),
|
|
96
|
+
onSearchChange: setSearchText
|
|
95
97
|
}
|
|
96
98
|
)));
|
|
97
99
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionsCard.esm.js","sources":["../../../src/components/RoleOverview/PermissionsCard.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Table, WarningPanel } from '@backstage/core-components';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\n\nimport { policyEntityUpdatePermission } from '@backstage-community/plugin-rbac-common';\n\nimport { usePermissionPolicies } from '../../hooks/usePermissionPolicies';\nimport {
|
|
1
|
+
{"version":3,"file":"PermissionsCard.esm.js","sources":["../../../src/components/RoleOverview/PermissionsCard.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 { parseEntityRef } from '@backstage/catalog-model';\nimport { Table, WarningPanel } from '@backstage/core-components';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\n\nimport { policyEntityUpdatePermission } from '@backstage-community/plugin-rbac-common';\n\nimport { usePermissionPolicies } from '../../hooks/usePermissionPolicies';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport EditRole from '../EditRole';\nimport { columns } from './PermissionsListColumns';\n\ntype PermissionsCardProps = {\n entityReference: string;\n canReadUsersAndGroups: boolean;\n};\n\nconst getRefreshIcon = () => <CachedIcon />;\nconst getEditIcon = (isAllowed: boolean, roleName: string) => {\n const { kind, name, namespace } = parseEntityRef(roleName);\n\n return (\n <EditRole\n dataTestId={isAllowed ? 'update-policies' : 'disable-update-policies'}\n roleName={roleName}\n disable={!isAllowed}\n to={`../../role/${kind}/${namespace}/${name}?activeStep=${2}`}\n />\n );\n};\n\nexport const PermissionsCard = ({\n entityReference,\n canReadUsersAndGroups,\n}: PermissionsCardProps) => {\n const { data, loading, retry, error } =\n usePermissionPolicies(entityReference);\n const [searchText, setSearchText] = React.useState<string>();\n const permissionResult = usePermission({\n permission: policyEntityUpdatePermission,\n resourceRef: policyEntityUpdatePermission.resourceType,\n });\n\n const numberOfPolicies = React.useMemo(() => {\n const filteredPermissions = filterTableData({ data, columns, searchText });\n let policies = 0;\n filteredPermissions.forEach(p => {\n if (p.conditions) {\n policies++;\n return;\n }\n policies += p.policies.filter(pol => pol.effect === 'allow').length;\n });\n return policies;\n }, [data, searchText]);\n\n const actions = [\n {\n icon: getRefreshIcon,\n tooltip: 'Refresh',\n isFreeAction: true,\n onClick: () => {\n retry.permissionPoliciesRetry();\n retry.policiesRetry();\n retry.conditionalPoliciesRetry();\n },\n },\n {\n icon: () =>\n getEditIcon(\n permissionResult.allowed && canReadUsersAndGroups,\n entityReference,\n ),\n tooltip:\n permissionResult.allowed && canReadUsersAndGroups\n ? 'Edit'\n : 'Unauthorized to edit',\n isFreeAction: true,\n onClick: () => {},\n },\n ];\n\n return (\n <Card>\n <CardContent>\n {error?.name && error.name !== 404 && (\n <div style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={error?.message}\n title=\"Something went wrong while fetching the permission policies\"\n severity=\"error\"\n />\n </div>\n )}\n <Table\n title={\n !loading && data.length > 0\n ? `Permission Policies (${numberOfPolicies})`\n : 'Permission Policies'\n }\n actions={actions}\n options={{ padding: 'default', search: true, paging: true }}\n data={data}\n columns={columns}\n isLoading={loading}\n emptyContent={\n <Box\n data-testid=\"permission-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import Box from '@mui/material/Box';
|
|
|
5
5
|
import { useCheckIfLicensePluginEnabled } from '../../hooks/useCheckIfLicensePluginEnabled.esm.js';
|
|
6
6
|
import { useLocationToast } from '../../hooks/useLocationToast.esm.js';
|
|
7
7
|
import { useRoles } from '../../hooks/useRoles.esm.js';
|
|
8
|
+
import { filterTableData } from '../../utils/filter-table-data.esm.js';
|
|
8
9
|
import DownloadCSVLink from '../DownloadUserStatistics.esm.js';
|
|
9
10
|
import { SnackbarAlert } from '../SnackbarAlert.esm.js';
|
|
10
11
|
import { useToast } from '../ToastContext.esm.js';
|
|
@@ -16,7 +17,7 @@ const RolesList = () => {
|
|
|
16
17
|
const { toastMessage, setToastMessage } = useToast();
|
|
17
18
|
const { openDialog, setOpenDialog, deleteComponent } = useDeleteDialog();
|
|
18
19
|
useLocationToast(setToastMessage);
|
|
19
|
-
const [
|
|
20
|
+
const [searchText, setSearchText] = React.useState();
|
|
20
21
|
const { loading, data, retry, createRoleAllowed, createRoleLoading, error } = useRoles();
|
|
21
22
|
const closeDialog = () => {
|
|
22
23
|
setOpenDialog(false);
|
|
@@ -26,9 +27,10 @@ const RolesList = () => {
|
|
|
26
27
|
const onAlertClose = () => {
|
|
27
28
|
setToastMessage("");
|
|
28
29
|
};
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
const filteredRoles = React.useMemo(
|
|
31
|
+
() => filterTableData({ data, columns, searchText }),
|
|
32
|
+
[data, searchText]
|
|
33
|
+
);
|
|
32
34
|
const getErrorWarning = () => {
|
|
33
35
|
const errorTitleBase = "Something went wrong while fetching the";
|
|
34
36
|
const errorWarningArr = [
|
|
@@ -68,12 +70,11 @@ const RolesList = () => {
|
|
|
68
70
|
)), /* @__PURE__ */ React.createElement(
|
|
69
71
|
Table,
|
|
70
72
|
{
|
|
71
|
-
title: !loading && data?.length ? `All roles (${
|
|
73
|
+
title: !loading && data?.length ? `All roles (${filteredRoles.length})` : `All roles`,
|
|
72
74
|
options: { padding: "default", search: true, paging: true },
|
|
73
75
|
data,
|
|
74
76
|
isLoading: loading,
|
|
75
77
|
columns,
|
|
76
|
-
renderSummaryRow: (summary) => onSearchResultsChange(summary.data),
|
|
77
78
|
emptyContent: /* @__PURE__ */ React.createElement(
|
|
78
79
|
Box,
|
|
79
80
|
{
|
|
@@ -81,7 +82,8 @@ const RolesList = () => {
|
|
|
81
82
|
sx: { display: "flex", justifyContent: "center", p: 2 }
|
|
82
83
|
},
|
|
83
84
|
"No records found"
|
|
84
|
-
)
|
|
85
|
+
),
|
|
86
|
+
onSearchChange: setSearchText
|
|
85
87
|
}
|
|
86
88
|
), isLicensePluginEnabled.isEnabled && /* @__PURE__ */ React.createElement(DownloadCSVLink, null), openDialog && /* @__PURE__ */ React.createElement(
|
|
87
89
|
DeleteRoleDialog,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RolesList.esm.js","sources":["../../../src/components/RolesList/RolesList.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 { Progress, Table, WarningPanel } from '@backstage/core-components';\n\nimport { useDeleteDialog } from '@janus-idp/shared-react';\nimport Box from '@mui/material/Box';\n\nimport { useCheckIfLicensePluginEnabled } from '../../hooks/useCheckIfLicensePluginEnabled';\nimport { useLocationToast } from '../../hooks/useLocationToast';\nimport { useRoles } from '../../hooks/useRoles';\nimport {
|
|
1
|
+
{"version":3,"file":"RolesList.esm.js","sources":["../../../src/components/RolesList/RolesList.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 { Progress, Table, WarningPanel } from '@backstage/core-components';\n\nimport { useDeleteDialog } from '@janus-idp/shared-react';\nimport Box from '@mui/material/Box';\n\nimport { useCheckIfLicensePluginEnabled } from '../../hooks/useCheckIfLicensePluginEnabled';\nimport { useLocationToast } from '../../hooks/useLocationToast';\nimport { useRoles } from '../../hooks/useRoles';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport DownloadCSVLink from '../DownloadUserStatistics';\nimport { SnackbarAlert } from '../SnackbarAlert';\nimport { useToast } from '../ToastContext';\nimport DeleteRoleDialog from './DeleteRoleDialog';\nimport { columns } from './RolesListColumns';\nimport { RolesListToolbar } from './RolesListToolbar';\n\nexport const RolesList = () => {\n const { toastMessage, setToastMessage } = useToast();\n const { openDialog, setOpenDialog, deleteComponent } = useDeleteDialog();\n useLocationToast(setToastMessage);\n const [searchText, setSearchText] = React.useState<string>();\n const { loading, data, retry, createRoleAllowed, createRoleLoading, error } =\n useRoles();\n\n const closeDialog = () => {\n setOpenDialog(false);\n retry.roleRetry();\n retry.policiesRetry();\n };\n\n const onAlertClose = () => {\n setToastMessage('');\n };\n const filteredRoles = React.useMemo(\n () => filterTableData({ data, columns, searchText }),\n [data, searchText],\n );\n\n const getErrorWarning = () => {\n const errorTitleBase = 'Something went wrong while fetching the';\n const errorWarningArr = [\n { message: error?.rolesError, title: `${errorTitleBase} roles` },\n {\n message: error?.policiesError,\n title: `${errorTitleBase} permission policies`,\n },\n {\n message: error?.roleConditionError,\n title: `${errorTitleBase} role conditions`,\n },\n ];\n\n return (\n errorWarningArr.find(({ message }) => message) || {\n message: '',\n title: '',\n }\n );\n };\n\n const errorWarning = getErrorWarning();\n\n const isLicensePluginEnabled = useCheckIfLicensePluginEnabled();\n if (isLicensePluginEnabled.loading) {\n return <Progress />;\n }\n\n return (\n <>\n <SnackbarAlert toastMessage={toastMessage} onAlertClose={onAlertClose} />\n <RolesListToolbar\n createRoleAllowed={createRoleAllowed}\n createRoleLoading={createRoleLoading}\n />\n {errorWarning.message && (\n <div style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={errorWarning.message}\n title={errorWarning.title}\n severity=\"error\"\n />\n </div>\n )}\n <Table\n title={\n !loading && data?.length\n ? `All roles (${filteredRoles.length})`\n : `All roles`\n }\n options={{ padding: 'default', search: true, paging: true }}\n data={data}\n isLoading={loading}\n columns={columns}\n emptyContent={\n <Box\n data-testid=\"roles-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n {isLicensePluginEnabled.isEnabled && <DownloadCSVLink />}\n {openDialog && (\n <DeleteRoleDialog\n open={openDialog}\n closeDialog={closeDialog}\n roleName={deleteComponent.roleName}\n propOptions={{\n memberRefs:\n data.find(d => d.name === deleteComponent.roleName)?.members ||\n [],\n permissions:\n data.find(d => d.name === deleteComponent.roleName)\n ?.permissions || 0,\n }}\n />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const filterTableData = ({
|
|
2
|
+
data,
|
|
3
|
+
columns,
|
|
4
|
+
searchText
|
|
5
|
+
}) => {
|
|
6
|
+
if (!data || !data.length || !columns || !columns.length || !searchText) {
|
|
7
|
+
return data || [];
|
|
8
|
+
}
|
|
9
|
+
const upperCaseSearch = searchText.toLocaleUpperCase("en-US");
|
|
10
|
+
return data.filter((row) => {
|
|
11
|
+
const fieldValues = columns.map(
|
|
12
|
+
(column) => column.field ? row[column.field] : null
|
|
13
|
+
);
|
|
14
|
+
return fieldValues.some(
|
|
15
|
+
(fieldValue) => fieldValue?.toString().toLocaleUpperCase("en-US").includes(upperCaseSearch)
|
|
16
|
+
);
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { filterTableData };
|
|
21
|
+
//# sourceMappingURL=filter-table-data.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-table-data.esm.js","sources":["../../src/utils/filter-table-data.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 { TableColumn } from '@backstage/core-components';\n\n/**\n * Filter the given `data` rows with the Backstage TableColumn `columns` configuration\n * and the `search` string.\n *\n * It ignores upper/lower case similar to the underlaying @material-table/core implementation:\n * https://github.com/material-table-core/core/blob/v3.2.5/src/utils/data-manager.js#L808-L811\n */\nexport const filterTableData = <T extends Record<string, any>>({\n data,\n columns,\n searchText,\n}: {\n data: T[];\n columns: TableColumn<T>[];\n searchText?: string | null;\n}): T[] => {\n if (!data || !data.length || !columns || !columns.length || !searchText) {\n return data || [];\n }\n\n const upperCaseSearch = searchText.toLocaleUpperCase('en-US');\n\n return data.filter(row => {\n const fieldValues = columns.map(column =>\n column.field ? row[column.field] : null,\n );\n\n return fieldValues.some(fieldValue =>\n fieldValue\n ?.toString()\n .toLocaleUpperCase('en-US')\n .includes(upperCaseSearch),\n );\n });\n};\n"],"names":[],"mappings":"AAwBO,MAAM,kBAAkB,CAAgC;AAAA,EAC7D,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAIW,KAAA;AACT,EAAI,IAAA,CAAC,IAAQ,IAAA,CAAC,IAAK,CAAA,MAAA,IAAU,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,MAAU,IAAA,CAAC,UAAY,EAAA;AACvE,IAAA,OAAO,QAAQ,EAAC;AAAA;AAGlB,EAAM,MAAA,eAAA,GAAkB,UAAW,CAAA,iBAAA,CAAkB,OAAO,CAAA;AAE5D,EAAO,OAAA,IAAA,CAAK,OAAO,CAAO,GAAA,KAAA;AACxB,IAAA,MAAM,cAAc,OAAQ,CAAA,GAAA;AAAA,MAAI,YAC9B,MAAO,CAAA,KAAA,GAAQ,GAAI,CAAA,MAAA,CAAO,KAAK,CAAI,GAAA;AAAA,KACrC;AAEA,IAAA,OAAO,WAAY,CAAA,IAAA;AAAA,MAAK,CAAA,UAAA,KACtB,YACI,QAAS,EAAA,CACV,kBAAkB,OAAO,CAAA,CACzB,SAAS,eAAe;AAAA,KAC7B;AAAA,GACD,CAAA;AACH;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage-community/plugin-rbac",
|
|
3
|
-
"version": "1.33.
|
|
3
|
+
"version": "1.33.2",
|
|
4
4
|
"main": "dist/index.esm.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -85,16 +85,9 @@
|
|
|
85
85
|
"react-router-dom": "^6.0.0",
|
|
86
86
|
"start-server-and-test": "2.0.8"
|
|
87
87
|
},
|
|
88
|
-
"scalprum": {
|
|
89
|
-
"name": "janus-idp.backstage-plugin-rbac",
|
|
90
|
-
"exposedModules": {
|
|
91
|
-
"RbacPlugin": "./src/index.ts"
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
88
|
"files": [
|
|
95
|
-
"
|
|
96
|
-
"dist
|
|
97
|
-
"app-config.yaml"
|
|
89
|
+
"app-config.dynamic.yaml",
|
|
90
|
+
"dist"
|
|
98
91
|
],
|
|
99
92
|
"repository": {
|
|
100
93
|
"type": "git",
|