@backstage-community/plugin-rbac 1.42.2 → 1.44.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 +22 -0
- package/dist/alpha.d.ts +179 -0
- package/dist/alpha.esm.js +3 -0
- package/dist/alpha.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js +13 -9
- package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +3 -1
- package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +5 -3
- package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js +5 -3
- package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +7 -5
- package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +4 -2
- package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/const.esm.js +6 -12
- package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
- package/dist/components/CreateRole/AddMembersForm.esm.js +25 -19
- package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
- package/dist/components/CreateRole/AddedMembersTable.esm.js +10 -4
- package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -1
- package/dist/components/CreateRole/AddedMembersTableColumn.esm.js +30 -28
- package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
- package/dist/components/CreateRole/CancelDialog.esm.js +8 -9
- package/dist/components/CreateRole/CancelDialog.esm.js.map +1 -1
- package/dist/components/CreateRole/CreateRolePage.esm.js +8 -6
- package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -1
- package/dist/components/CreateRole/EditRolePage.esm.js +9 -7
- package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +9 -3
- package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js +6 -2
- package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +8 -4
- package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js +11 -6
- package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js.map +1 -1
- package/dist/components/CreateRole/PluginsDropdown.esm.js +4 -2
- package/dist/components/CreateRole/PluginsDropdown.esm.js.map +1 -1
- package/dist/components/CreateRole/ReviewStep.esm.js +9 -7
- package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
- package/dist/components/CreateRole/RoleDetailsForm.esm.js +8 -6
- package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -1
- package/dist/components/CreateRole/RoleForm.esm.js +27 -23
- package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
- package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js +24 -22
- package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
- package/dist/components/DownloadUserStatistics.esm.js +4 -2
- package/dist/components/DownloadUserStatistics.esm.js.map +1 -1
- package/dist/components/EditRole.esm.js +4 -2
- package/dist/components/EditRole.esm.js.map +1 -1
- package/dist/components/RbacPage.esm.js +4 -2
- package/dist/components/RbacPage.esm.js.map +1 -1
- package/dist/components/RoleOverview/AboutCard.esm.js +12 -8
- package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -1
- package/dist/components/RoleOverview/MembersCard.esm.js +18 -9
- package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
- package/dist/components/RoleOverview/MembersListColumns.esm.js +42 -40
- package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
- package/dist/components/RoleOverview/PermissionsCard.esm.js +27 -10
- package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
- package/dist/components/RoleOverview/PermissionsListColumns.esm.js +38 -36
- package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
- package/dist/components/RoleOverview/RoleOverviewPage.esm.js +3 -1
- package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -1
- package/dist/components/RolesList/DeleteRole.esm.js +4 -2
- package/dist/components/RolesList/DeleteRole.esm.js.map +1 -1
- package/dist/components/RolesList/DeleteRoleDialog.esm.js +23 -38
- package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -1
- package/dist/components/RolesList/RolesList.esm.js +19 -9
- package/dist/components/RolesList/RolesList.esm.js.map +1 -1
- package/dist/components/RolesList/RolesListColumns.esm.js +63 -61
- package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
- package/dist/components/RolesList/RolesListToolbar.esm.js +20 -10
- package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -1
- package/dist/components/Router.esm.js +4 -2
- package/dist/components/Router.esm.js.map +1 -1
- package/dist/components/Trans.esm.js +22 -0
- package/dist/components/Trans.esm.js.map +1 -0
- package/dist/hooks/useActionPermissionTooltip.esm.js +10 -5
- package/dist/hooks/useActionPermissionTooltip.esm.js.map +1 -1
- package/dist/hooks/useLanguage.esm.js +7 -0
- package/dist/hooks/useLanguage.esm.js.map +1 -0
- package/dist/hooks/useMembers.esm.js +16 -8
- package/dist/hooks/useMembers.esm.js.map +1 -1
- package/dist/hooks/usePermissionPolicies.esm.js +20 -9
- package/dist/hooks/usePermissionPolicies.esm.js.map +1 -1
- package/dist/hooks/useTranslation.esm.js +8 -0
- package/dist/hooks/useTranslation.esm.js.map +1 -0
- package/dist/translations/de.esm.js +176 -0
- package/dist/translations/de.esm.js.map +1 -0
- package/dist/translations/es.esm.js +176 -0
- package/dist/translations/es.esm.js.map +1 -0
- package/dist/translations/fr.esm.js +176 -0
- package/dist/translations/fr.esm.js.map +1 -0
- package/dist/translations/index.esm.js +15 -0
- package/dist/translations/index.esm.js.map +1 -0
- package/dist/translations/it.esm.js +176 -0
- package/dist/translations/it.esm.js.map +1 -0
- package/dist/translations/ref.esm.js +215 -0
- package/dist/translations/ref.esm.js.map +1 -0
- package/dist/utils/conditional-access-utils.esm.js +4 -4
- package/dist/utils/conditional-access-utils.esm.js.map +1 -1
- package/dist/utils/create-role-utils.esm.js +11 -11
- package/dist/utils/create-role-utils.esm.js.map +1 -1
- package/dist/utils/filter-table-data.esm.js +4 -3
- package/dist/utils/filter-table-data.esm.js.map +1 -1
- package/dist/utils/rbac-utils.esm.js +23 -19
- package/dist/utils/rbac-utils.esm.js.map +1 -1
- package/dist/utils/role-form-utils.esm.js +17 -12
- package/dist/utils/role-form-utils.esm.js.map +1 -1
- package/dist/utils/string-utils.esm.js +2 -2
- package/dist/utils/string-utils.esm.js.map +1 -1
- package/package.json +42 -28
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-role-utils.esm.js","sources":["../../src/utils/create-role-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 * as yup from 'yup';\n\nimport {\n isResourcedPolicy,\n PluginPermissionMetaData,\n PolicyDetails,\n Role,\n RoleBasedPolicy,\n} from '@backstage-community/plugin-rbac-common';\n\nimport { criterias } from '../components/ConditionalAccess/const';\nimport { ConditionsData } from '../components/ConditionalAccess/types';\nimport {\n PermissionPolicies,\n PluginsPermissionPoliciesData,\n PluginsPermissions,\n RoleFormValues,\n SelectedMember,\n} from '../components/CreateRole/types';\nimport {\n MemberEntity,\n PermissionsData,\n RoleBasedConditions,\n UpdatedConditionsData,\n} from '../types';\nimport { capitalizeFirstLetter } from './string-utils';\n\nexport const uniqBy = (arr: string[], iteratee: (arg: string) => any) => {\n return arr.filter(\n (x, i, self) => i === self.findIndex(y => iteratee(x) === iteratee(y)),\n );\n};\n\nexport const getRoleData = (values: RoleFormValues): Role => {\n return {\n memberReferences: values.selectedMembers.map(\n (mem: SelectedMember) => mem.ref,\n ),\n name: `${values.kind}:${values.namespace}/${values.name}`,\n metadata: {\n description: values.description,\n owner: values.owner,\n },\n };\n};\n\nexport const validationSchema = yup.object({\n name: yup.string().required('Name is required'),\n selectedMembers: yup.array().min(1, 'No member selected'),\n selectedPlugins: yup.array().min(1, 'No plugin selected'),\n permissionPoliciesRows: yup\n .array()\n .of(\n yup.object().shape({\n plugin: yup.string().required('Plugin is required'),\n permission: yup.string().required('Permission is required'),\n policies: yup\n .array()\n .min(1)\n .of(\n yup\n .object()\n .shape({ policy: yup.string(), effect: yup.string() })\n .test(p => p.effect === 'allow'),\n ),\n }),\n )\n .min(1),\n});\n\nexport const getMembersCount = (member: MemberEntity) => {\n return member.kind === 'Group'\n ? member.relations?.reduce((acc: any, relation: { type: string }) => {\n let temp = acc;\n if (relation.type === 'hasMember') {\n temp++;\n }\n return temp;\n }, 0)\n : undefined;\n};\n\nexport const getParentGroupsCount = (member: MemberEntity) => {\n return member.kind === 'Group'\n ? member.relations?.reduce((acc: any, relation: { type: string }) => {\n let temp = acc;\n if (relation.type === 'childOf') {\n temp++;\n }\n return temp;\n }, 0)\n : undefined;\n};\n\nexport const getChildGroupsCount = (member: MemberEntity) => {\n return member.kind === 'Group'\n ? member.relations?.reduce((acc: any, relation: { type: string }) => {\n let temp = acc;\n if (relation.type === 'parentOf') {\n temp++;\n }\n return temp;\n }, 0)\n : undefined;\n};\n\nexport const getPermissionPolicies = (\n policies: PolicyDetails[],\n): PermissionPolicies => {\n return policies.reduce(\n (ppsAcc: PermissionPolicies, policy: PolicyDetails) => {\n const permission = policy.name;\n return {\n ...ppsAcc,\n [permission]: policies.reduce(\n (policiesAcc: { policies: string[]; isResourced: boolean }, pol) => {\n const perm = pol.name;\n if (permission === perm)\n return {\n policies: uniqBy(\n [\n ...policiesAcc.policies,\n capitalizeFirstLetter(pol.policy as string),\n ],\n val => val,\n ),\n isResourced: isResourcedPolicy(pol),\n resourceType: isResourcedPolicy(pol) ? pol.resourceType : '',\n };\n return policiesAcc;\n },\n { policies: [], isResourced: false },\n ),\n };\n },\n {},\n );\n};\n\nexport const getPluginsPermissionPoliciesData = (\n pluginsPermissionPolicies: PluginPermissionMetaData[],\n): PluginsPermissionPoliciesData => {\n const plugins: string[] = pluginsPermissionPolicies.map(\n pluginPp => pluginPp.pluginId,\n );\n const pluginsPermissions = pluginsPermissionPolicies.reduce(\n (acc: PluginsPermissions, pp, index) => {\n const permissions = pp.policies.reduce((plcAcc: string[], plc) => {\n const permission = plc.name;\n return [...plcAcc, permission];\n }, []);\n return {\n ...acc,\n [plugins[index]]: {\n permissions: permissions ?? [],\n policies: {\n ...(pp.policies ? getPermissionPolicies(pp.policies) : {}),\n },\n },\n };\n },\n {},\n );\n return { plugins, pluginsPermissions };\n};\n\nexport const getPermissionPoliciesData = (\n values: RoleFormValues,\n): RoleBasedPolicy[] => {\n const { kind, name, namespace, permissionPoliciesRows } = values;\n\n return permissionPoliciesRows.reduce(\n (acc: RoleBasedPolicy[], permissionPolicyRow) => {\n const {\n permission,\n policies,\n conditions,\n resourceType,\n usingResourceType,\n } = permissionPolicyRow;\n const permissionPoliciesData = policies.reduce(\n (pAcc: RoleBasedPolicy[], policy) => {\n if (policy.effect === 'allow' && !conditions) {\n return [\n ...pAcc,\n {\n entityReference: `${kind}:${namespace}/${name}`,\n permission:\n resourceType && usingResourceType\n ? `${resourceType}`\n : `${permission}`,\n policy: policy.policy.toLocaleLowerCase('en-US'),\n effect: 'allow',\n },\n ];\n }\n return pAcc;\n },\n [],\n );\n return [...acc, ...permissionPoliciesData];\n },\n [],\n );\n};\n\nexport const getConditionalPermissionPoliciesData = (\n values: RoleFormValues,\n) => {\n const { kind, name, namespace, permissionPoliciesRows } = values;\n\n return permissionPoliciesRows.reduce(\n (acc: RoleBasedConditions[], permissionPolicyRow: PermissionsData) => {\n const { policies, isResourced, plugin, conditions, resourceType } =\n permissionPolicyRow;\n const permissionMapping = policies.reduce((pAcc: string[], policy) => {\n if (policy.effect === 'allow') {\n return [...pAcc, policy.policy.toLocaleLowerCase('en-US')];\n }\n return pAcc;\n }, []);\n return isResourced && conditions\n ? [\n ...acc,\n {\n result: 'CONDITIONAL',\n roleEntityRef: `${kind}:${namespace}/${name}`,\n pluginId: `${plugin}`,\n resourceType: `${resourceType}`,\n permissionMapping,\n conditions:\n Object.keys(conditions)[0] === criterias.condition\n ? { ...conditions.condition }\n : conditions,\n } as RoleBasedConditions,\n ]\n : acc;\n },\n [] as RoleBasedConditions[],\n );\n};\n\nexport const getUpdatedConditionalPolicies = (\n values: RoleFormValues,\n initialValues: RoleFormValues,\n): UpdatedConditionsData => {\n const initialConditionsWithId = initialValues.permissionPoliciesRows.filter(\n ppr => ppr.id,\n );\n\n const conditionsWithId = values.permissionPoliciesRows.filter(ppr => ppr.id);\n\n return conditionsWithId.length > 0\n ? conditionsWithId.reduce(\n (\n acc: { id: number; updateCondition: RoleBasedConditions }[],\n condition: PermissionsData,\n ) => {\n const conditionExists = initialConditionsWithId.find(\n c => c.id === condition.id,\n );\n\n if (conditionExists && condition.id)\n return [\n ...acc,\n {\n id: condition.id,\n updateCondition: getConditionalPermissionPoliciesData({\n ...values,\n permissionPoliciesRows: [condition],\n })[0],\n },\n ];\n return acc;\n },\n [],\n )\n : [];\n};\n\nexport const getNewConditionalPolicies = (values: RoleFormValues) => {\n const newValues = { ...values };\n const newPermissionPolicies = values.permissionPoliciesRows.filter(\n ppr => !ppr.id,\n );\n newValues.permissionPoliciesRows = newPermissionPolicies;\n return getConditionalPermissionPoliciesData(newValues);\n};\n\nexport const getRemovedConditionalPoliciesIds = (\n values: RoleFormValues,\n initialValues: RoleFormValues,\n) => {\n const initialConditionsIds = initialValues.permissionPoliciesRows\n .map(ppr => ppr.id)\n .filter(id => id);\n\n const newConditionsIds = values.permissionPoliciesRows\n .map(ppr => ppr.id)\n .filter(id => id);\n\n return initialConditionsIds.length > 0\n ? initialConditionsIds.reduce((acc: number[], oldId) => {\n const conditionExists = newConditionsIds.includes(oldId);\n if (conditionExists) return acc;\n return oldId ? [...acc, oldId] : acc;\n }, [])\n : [];\n};\n\nexport const getPermissionsNumber = (values: RoleFormValues) => {\n return (\n getPermissionPoliciesData(values).length +\n getConditionalPermissionPoliciesData(values).length\n );\n};\n\nexport const getConditionsNumber = (values: RoleFormValues) => {\n return getConditionalPermissionPoliciesData(values)?.length ?? 0;\n};\n\nexport const getRulesNumber = (conditions?: ConditionsData) => {\n if (!conditions) return 0;\n let rulesNumber = 0;\n\n if (conditions.allOf) {\n rulesNumber += conditions.allOf.reduce((acc, condition) => {\n return acc + getRulesNumber(condition as ConditionsData);\n }, 0);\n }\n\n if (conditions.anyOf) {\n rulesNumber += conditions.anyOf.reduce((acc, condition) => {\n return acc + getRulesNumber(condition as ConditionsData);\n }, 0);\n }\n\n if (conditions.not) {\n rulesNumber += getRulesNumber(conditions.not as ConditionsData);\n }\n\n if (conditions.condition || Object.keys(conditions).includes('rule')) {\n rulesNumber += 1;\n }\n\n return rulesNumber;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-role-utils.esm.js","sources":["../../src/utils/create-role-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 * as yup from 'yup';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nimport {\n isResourcedPolicy,\n PluginPermissionMetaData,\n PolicyDetails,\n Role,\n RoleBasedPolicy,\n} from '@backstage-community/plugin-rbac-common';\n\nimport { criterias } from '../components/ConditionalAccess/const';\nimport { ConditionsData } from '../components/ConditionalAccess/types';\nimport {\n PermissionPolicies,\n PluginsPermissionPoliciesData,\n PluginsPermissions,\n RoleFormValues,\n SelectedMember,\n} from '../components/CreateRole/types';\nimport {\n MemberEntity,\n PermissionsData,\n RoleBasedConditions,\n UpdatedConditionsData,\n} from '../types';\nimport { capitalizeFirstLetter } from './string-utils';\nimport { rbacTranslationRef } from '../translations';\n\nexport const uniqBy = (arr: string[], iteratee: (arg: string) => any) => {\n return arr.filter(\n (x, i, self) => i === self.findIndex(y => iteratee(x) === iteratee(y)),\n );\n};\n\nexport const getRoleData = (values: RoleFormValues): Role => {\n return {\n memberReferences: values.selectedMembers.map(\n (mem: SelectedMember) => mem.ref,\n ),\n name: `${values.kind}:${values.namespace}/${values.name}`,\n metadata: {\n description: values.description,\n owner: values.owner,\n },\n };\n};\n\nexport const getValidationSchema = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) =>\n yup.object({\n name: yup.string().required(t('common.nameRequired')),\n selectedMembers: yup.array().min(1, t('common.noMemberSelected')),\n selectedPlugins: yup.array().min(1, t('common.noPluginSelected')),\n permissionPoliciesRows: yup\n .array()\n .of(\n yup.object().shape({\n plugin: yup.string().required(t('common.pluginRequired')),\n permission: yup.string().required(t('common.permissionRequired')),\n policies: yup\n .array()\n .min(1)\n .of(\n yup\n .object()\n .shape({ policy: yup.string(), effect: yup.string() })\n .test(p => p.effect === 'allow'),\n ),\n }),\n )\n .min(1),\n });\n\nexport const getMembersCount = (member: MemberEntity) => {\n return member.kind === 'Group'\n ? member.relations?.reduce((acc: any, relation: { type: string }) => {\n let temp = acc;\n if (relation.type === 'hasMember') {\n temp++;\n }\n return temp;\n }, 0)\n : undefined;\n};\n\nexport const getParentGroupsCount = (member: MemberEntity) => {\n return member.kind === 'Group'\n ? member.relations?.reduce((acc: any, relation: { type: string }) => {\n let temp = acc;\n if (relation.type === 'childOf') {\n temp++;\n }\n return temp;\n }, 0)\n : undefined;\n};\n\nexport const getChildGroupsCount = (member: MemberEntity) => {\n return member.kind === 'Group'\n ? member.relations?.reduce((acc: any, relation: { type: string }) => {\n let temp = acc;\n if (relation.type === 'parentOf') {\n temp++;\n }\n return temp;\n }, 0)\n : undefined;\n};\n\nexport const getPermissionPolicies = (\n policies: PolicyDetails[],\n): PermissionPolicies => {\n return policies.reduce(\n (ppsAcc: PermissionPolicies, policy: PolicyDetails) => {\n const permission = policy.name;\n return {\n ...ppsAcc,\n [permission]: policies.reduce(\n (policiesAcc: { policies: string[]; isResourced: boolean }, pol) => {\n const perm = pol.name;\n if (permission === perm)\n return {\n policies: uniqBy(\n [\n ...policiesAcc.policies,\n capitalizeFirstLetter(pol.policy as string),\n ],\n val => val,\n ),\n isResourced: isResourcedPolicy(pol),\n resourceType: isResourcedPolicy(pol) ? pol.resourceType : '',\n };\n return policiesAcc;\n },\n { policies: [], isResourced: false },\n ),\n };\n },\n {},\n );\n};\n\nexport const getPluginsPermissionPoliciesData = (\n pluginsPermissionPolicies: PluginPermissionMetaData[],\n): PluginsPermissionPoliciesData => {\n const plugins: string[] = pluginsPermissionPolicies.map(\n pluginPp => pluginPp.pluginId,\n );\n const pluginsPermissions = pluginsPermissionPolicies.reduce(\n (acc: PluginsPermissions, pp, index) => {\n const permissions = pp.policies.reduce((plcAcc: string[], plc) => {\n const permission = plc.name;\n return [...plcAcc, permission];\n }, []);\n return {\n ...acc,\n [plugins[index]]: {\n permissions: permissions ?? [],\n policies: {\n ...(pp.policies ? getPermissionPolicies(pp.policies) : {}),\n },\n },\n };\n },\n {},\n );\n return { plugins, pluginsPermissions };\n};\n\nexport const getPermissionPoliciesData = (\n values: RoleFormValues,\n locale = 'en-US',\n): RoleBasedPolicy[] => {\n const { kind, name, namespace, permissionPoliciesRows } = values;\n\n return permissionPoliciesRows.reduce(\n (acc: RoleBasedPolicy[], permissionPolicyRow) => {\n const {\n permission,\n policies,\n conditions,\n resourceType,\n usingResourceType,\n } = permissionPolicyRow;\n const permissionPoliciesData = policies.reduce(\n (pAcc: RoleBasedPolicy[], policy) => {\n if (policy.effect === 'allow' && !conditions) {\n return [\n ...pAcc,\n {\n entityReference: `${kind}:${namespace}/${name}`,\n permission:\n resourceType && usingResourceType\n ? `${resourceType}`\n : `${permission}`,\n policy: policy.policy.toLocaleLowerCase(locale),\n effect: 'allow',\n },\n ];\n }\n return pAcc;\n },\n [],\n );\n return [...acc, ...permissionPoliciesData];\n },\n [],\n );\n};\n\nexport const getConditionalPermissionPoliciesData = (\n values: RoleFormValues,\n locale = 'en-US',\n) => {\n const { kind, name, namespace, permissionPoliciesRows } = values;\n\n return permissionPoliciesRows.reduce(\n (acc: RoleBasedConditions[], permissionPolicyRow: PermissionsData) => {\n const { policies, isResourced, plugin, conditions, resourceType } =\n permissionPolicyRow;\n const permissionMapping = policies.reduce((pAcc: string[], policy) => {\n if (policy.effect === 'allow') {\n return [...pAcc, policy.policy.toLocaleLowerCase(locale)];\n }\n return pAcc;\n }, []);\n return isResourced && conditions\n ? [\n ...acc,\n {\n result: 'CONDITIONAL',\n roleEntityRef: `${kind}:${namespace}/${name}`,\n pluginId: `${plugin}`,\n resourceType: `${resourceType}`,\n permissionMapping,\n conditions:\n Object.keys(conditions)[0] === criterias.condition\n ? { ...conditions.condition }\n : conditions,\n } as RoleBasedConditions,\n ]\n : acc;\n },\n [] as RoleBasedConditions[],\n );\n};\n\nexport const getUpdatedConditionalPolicies = (\n values: RoleFormValues,\n initialValues: RoleFormValues,\n): UpdatedConditionsData => {\n const initialConditionsWithId = initialValues.permissionPoliciesRows.filter(\n ppr => ppr.id,\n );\n\n const conditionsWithId = values.permissionPoliciesRows.filter(ppr => ppr.id);\n\n return conditionsWithId.length > 0\n ? conditionsWithId.reduce(\n (\n acc: { id: number; updateCondition: RoleBasedConditions }[],\n condition: PermissionsData,\n ) => {\n const conditionExists = initialConditionsWithId.find(\n c => c.id === condition.id,\n );\n\n if (conditionExists && condition.id)\n return [\n ...acc,\n {\n id: condition.id,\n updateCondition: getConditionalPermissionPoliciesData({\n ...values,\n permissionPoliciesRows: [condition],\n })[0],\n },\n ];\n return acc;\n },\n [],\n )\n : [];\n};\n\nexport const getNewConditionalPolicies = (values: RoleFormValues) => {\n const newValues = { ...values };\n const newPermissionPolicies = values.permissionPoliciesRows.filter(\n ppr => !ppr.id,\n );\n newValues.permissionPoliciesRows = newPermissionPolicies;\n return getConditionalPermissionPoliciesData(newValues);\n};\n\nexport const getRemovedConditionalPoliciesIds = (\n values: RoleFormValues,\n initialValues: RoleFormValues,\n) => {\n const initialConditionsIds = initialValues.permissionPoliciesRows\n .map(ppr => ppr.id)\n .filter(id => id);\n\n const newConditionsIds = values.permissionPoliciesRows\n .map(ppr => ppr.id)\n .filter(id => id);\n\n return initialConditionsIds.length > 0\n ? initialConditionsIds.reduce((acc: number[], oldId) => {\n const conditionExists = newConditionsIds.includes(oldId);\n if (conditionExists) return acc;\n return oldId ? [...acc, oldId] : acc;\n }, [])\n : [];\n};\n\nexport const getPermissionsNumber = (values: RoleFormValues) => {\n return (\n getPermissionPoliciesData(values).length +\n getConditionalPermissionPoliciesData(values).length\n );\n};\n\nexport const getConditionsNumber = (values: RoleFormValues) => {\n return getConditionalPermissionPoliciesData(values)?.length ?? 0;\n};\n\nexport const getRulesNumber = (conditions?: ConditionsData) => {\n if (!conditions) return 0;\n let rulesNumber = 0;\n\n if (conditions.allOf) {\n rulesNumber += conditions.allOf.reduce((acc, condition) => {\n return acc + getRulesNumber(condition as ConditionsData);\n }, 0);\n }\n\n if (conditions.anyOf) {\n rulesNumber += conditions.anyOf.reduce((acc, condition) => {\n return acc + getRulesNumber(condition as ConditionsData);\n }, 0);\n }\n\n if (conditions.not) {\n rulesNumber += getRulesNumber(conditions.not as ConditionsData);\n }\n\n if (conditions.condition || Object.keys(conditions).includes('rule')) {\n rulesNumber += 1;\n }\n\n return rulesNumber;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
const filterTableData = ({
|
|
2
2
|
data,
|
|
3
3
|
columns,
|
|
4
|
-
searchText
|
|
4
|
+
searchText,
|
|
5
|
+
locale = "en"
|
|
5
6
|
}) => {
|
|
6
7
|
if (!data || !data.length || !columns || !columns.length || !searchText) {
|
|
7
8
|
return data || [];
|
|
8
9
|
}
|
|
9
|
-
const upperCaseSearch = searchText.toLocaleUpperCase(
|
|
10
|
+
const upperCaseSearch = searchText.toLocaleUpperCase(locale);
|
|
10
11
|
return data.filter((row) => {
|
|
11
12
|
const fieldValues = columns.map(
|
|
12
13
|
(column) => column.field ? row[column.field] : null
|
|
13
14
|
);
|
|
14
15
|
return fieldValues.some(
|
|
15
|
-
(fieldValue) => fieldValue?.toString().toLocaleUpperCase(
|
|
16
|
+
(fieldValue) => fieldValue?.toString().toLocaleUpperCase(locale).includes(upperCaseSearch)
|
|
16
17
|
);
|
|
17
18
|
});
|
|
18
19
|
};
|
|
@@ -1 +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(
|
|
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 locale = 'en',\n}: {\n data: T[];\n columns: TableColumn<T>[];\n searchText?: string | null;\n locale?: string;\n}): T[] => {\n if (!data || !data.length || !columns || !columns.length || !searchText) {\n return data || [];\n }\n\n const upperCaseSearch = searchText.toLocaleUpperCase(locale);\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(locale)\n .includes(upperCaseSearch),\n );\n });\n};\n"],"names":[],"mappings":"AAwBO,MAAM,kBAAkB,CAAgC;AAAA,EAC7D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAS,GAAA;AACX,CAKW,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,MAAM,CAAA;AAE3D,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,MAAM,CAAA,CACxB,SAAS,eAAe;AAAA,KAC7B;AAAA,GACD,CAAA;AACH;;;;"}
|
|
@@ -15,22 +15,24 @@ const getPermissionsArray = (role, policies) => {
|
|
|
15
15
|
const getPermissions = (role, policies) => {
|
|
16
16
|
return getPermissionsArray(role, policies).length;
|
|
17
17
|
};
|
|
18
|
-
const getMembersString = (res) => {
|
|
18
|
+
const getMembersString = (res, t) => {
|
|
19
19
|
let membersString = "";
|
|
20
20
|
if (res.groups > 0) {
|
|
21
|
-
|
|
21
|
+
const groupsText = res.groups > 1 ? t("common.groups") : t("common.group");
|
|
22
|
+
membersString = `${res.groups} ${groupsText}`;
|
|
22
23
|
}
|
|
23
24
|
if (res.users > 0) {
|
|
25
|
+
const usersText = res.users > 1 ? t("common.users") : t("common.user");
|
|
24
26
|
membersString = membersString.concat(
|
|
25
27
|
membersString.length > 0 ? ", " : "",
|
|
26
|
-
`${res.users} ${
|
|
28
|
+
`${res.users} ${usersText}`
|
|
27
29
|
);
|
|
28
30
|
}
|
|
29
31
|
return membersString;
|
|
30
32
|
};
|
|
31
|
-
const getMembers = (members) => {
|
|
33
|
+
const getMembers = (members, t) => {
|
|
32
34
|
if (!members || members.length === 0) {
|
|
33
|
-
return "
|
|
35
|
+
return t("common.noMembers");
|
|
34
36
|
}
|
|
35
37
|
const res = members.reduce(
|
|
36
38
|
(acc, member) => {
|
|
@@ -52,7 +54,7 @@ const getMembers = (members) => {
|
|
|
52
54
|
},
|
|
53
55
|
{ users: 0, groups: 0 }
|
|
54
56
|
);
|
|
55
|
-
return getMembersString(res);
|
|
57
|
+
return getMembersString(res, t);
|
|
56
58
|
};
|
|
57
59
|
const getMembersFromGroup = (group) => {
|
|
58
60
|
const membersList = group.relations?.reduce((acc, relation) => {
|
|
@@ -96,14 +98,14 @@ const getPolicy = (str) => {
|
|
|
96
98
|
const arr = str.split(".");
|
|
97
99
|
return arr[arr.length - 1];
|
|
98
100
|
};
|
|
99
|
-
const getAllPolicies = (permission, allowedPolicies, policies) => {
|
|
101
|
+
const getAllPolicies = (permission, allowedPolicies, policies, t, locale = "en-US") => {
|
|
100
102
|
const deniedPolicies = policies?.reduce((acc, p) => {
|
|
101
103
|
const perm = p.name;
|
|
102
104
|
if (permission === perm && !allowedPolicies.find(
|
|
103
|
-
(allowedPolicy) => allowedPolicy.policy.toLocaleLowerCase(
|
|
105
|
+
(allowedPolicy) => allowedPolicy.policy.toLocaleLowerCase(locale) === p.policy?.toLocaleLowerCase(locale)
|
|
104
106
|
)) {
|
|
105
107
|
acc.push({
|
|
106
|
-
policy: capitalizeFirstLetter(p.policy) || "
|
|
108
|
+
policy: capitalizeFirstLetter(p.policy) || t("common.use"),
|
|
107
109
|
effect: "deny"
|
|
108
110
|
});
|
|
109
111
|
}
|
|
@@ -111,7 +113,7 @@ const getAllPolicies = (permission, allowedPolicies, policies) => {
|
|
|
111
113
|
}, []);
|
|
112
114
|
return [...allowedPolicies || [], ...deniedPolicies || []];
|
|
113
115
|
};
|
|
114
|
-
const getPermissionsData = (policies, permissionPolicies) => {
|
|
116
|
+
const getPermissionsData = (policies, permissionPolicies, t, locale = "en") => {
|
|
115
117
|
const data = policies.reduce(
|
|
116
118
|
(acc, policy) => {
|
|
117
119
|
if (policy?.effect === "allow") {
|
|
@@ -124,9 +126,9 @@ const getPermissionsData = (policies, permissionPolicies) => {
|
|
|
124
126
|
acc.push({
|
|
125
127
|
permission: pluginInfo.permissionName,
|
|
126
128
|
plugin: pluginInfo.pluginId,
|
|
127
|
-
policyString: policyString.add(policyTitleCase || "
|
|
129
|
+
policyString: policyString.add(policyTitleCase || t("common.use")),
|
|
128
130
|
policies: policiesSet.add({
|
|
129
|
-
policy: policyTitleCase || "
|
|
131
|
+
policy: policyTitleCase || t("common.use"),
|
|
130
132
|
effect: policy.effect
|
|
131
133
|
}),
|
|
132
134
|
isResourced: pluginInfo.isResourced,
|
|
@@ -145,7 +147,9 @@ const getPermissionsData = (policies, permissionPolicies) => {
|
|
|
145
147
|
policies: getAllPolicies(
|
|
146
148
|
p.permission,
|
|
147
149
|
Array.from(p.policies),
|
|
148
|
-
permissionPolicies.find((pp) => pp.pluginId === p.plugin)?.policies
|
|
150
|
+
permissionPolicies.find((pp) => pp.pluginId === p.plugin)?.policies,
|
|
151
|
+
t,
|
|
152
|
+
locale
|
|
149
153
|
)
|
|
150
154
|
}));
|
|
151
155
|
};
|
|
@@ -188,10 +192,10 @@ const getConditionsData = (conditions) => {
|
|
|
188
192
|
return { condition: conditions };
|
|
189
193
|
}
|
|
190
194
|
};
|
|
191
|
-
const getPoliciesData = (allowedPermissions, policies) => {
|
|
195
|
+
const getPoliciesData = (allowedPermissions, policies, locale = "en") => {
|
|
192
196
|
return policies.map((p) => ({
|
|
193
197
|
policy: p,
|
|
194
|
-
...allowedPermissions.includes(p.toLocaleLowerCase(
|
|
198
|
+
...allowedPermissions.includes(p.toLocaleLowerCase(locale)) ? { effect: "allow" } : { effect: "deny" }
|
|
195
199
|
}));
|
|
196
200
|
};
|
|
197
201
|
const getPolicyString = (policies) => {
|
|
@@ -201,17 +205,17 @@ const getPolicyString = (policies) => {
|
|
|
201
205
|
}, "");
|
|
202
206
|
return policyStr.slice(0, policyStr.length - 2);
|
|
203
207
|
};
|
|
204
|
-
const getConditionalPermissionsData = (conditionalPermissions, permissionPolicies, allPermissionPolicies) => {
|
|
208
|
+
const getConditionalPermissionsData = (conditionalPermissions, permissionPolicies, allPermissionPolicies, locale = "en-US") => {
|
|
205
209
|
return conditionalPermissions.reduce((acc, cp) => {
|
|
206
210
|
const conditions = getConditionsData(cp.conditions);
|
|
207
211
|
const allowedPermissions = cp.permissionMapping.map(
|
|
208
|
-
(action) => action.toLocaleLowerCase(
|
|
212
|
+
(action) => action.toLocaleLowerCase(locale)
|
|
209
213
|
);
|
|
210
214
|
const pluginPermissionMetaData = allPermissionPolicies.find(
|
|
211
215
|
(pp) => pp.pluginId === cp.pluginId
|
|
212
216
|
);
|
|
213
217
|
const perms = pluginPermissionMetaData?.policies.filter(
|
|
214
|
-
(po) => isResourcedPolicy(po) && po.resourceType === cp.resourceType && allowedPermissions.includes(po.policy.toLocaleLowerCase(
|
|
218
|
+
(po) => isResourcedPolicy(po) && po.resourceType === cp.resourceType && allowedPermissions.includes(po.policy.toLocaleLowerCase(locale))
|
|
215
219
|
) ?? [];
|
|
216
220
|
const allPolicies = (pm) => permissionPolicies.pluginsPermissions?.[cp.pluginId]?.policies?.[pm]?.policies ?? [];
|
|
217
221
|
return [
|
|
@@ -230,7 +234,7 @@ const getConditionalPermissionsData = (conditionalPermissions, permissionPolicie
|
|
|
230
234
|
policyString: getPolicyString(policies),
|
|
231
235
|
conditions,
|
|
232
236
|
...index === 0 || !!policies.find(
|
|
233
|
-
(pl) => pl.policy.toLocaleLowerCase(
|
|
237
|
+
(pl) => pl.policy.toLocaleLowerCase(locale) === arr[index - 1].policy && pl.effect === "allow"
|
|
234
238
|
) ? { id: cp.id } : {}
|
|
235
239
|
};
|
|
236
240
|
}) : []
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac-utils.esm.js","sources":["../../src/utils/rbac-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 {\n GroupEntity,\n isUserEntity,\n parseEntityRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport {\n AllOfCriteria,\n AnyOfCriteria,\n NotCriteria,\n PermissionCondition,\n PermissionCriteria,\n} from '@backstage/plugin-permission-common';\n\nimport { capitalizeFirstLetter } from './string-utils';\n\nimport {\n isResourcedPolicy,\n PermissionAction,\n PluginPermissionMetaData,\n PolicyDetails,\n RoleBasedPolicy,\n RoleConditionalPolicyDecision,\n} from '@backstage-community/plugin-rbac-common';\n\nimport { criterias } from '../components/ConditionalAccess/const';\nimport { ConditionsData } from '../components/ConditionalAccess/types';\nimport {\n PluginsPermissionPoliciesData,\n RowPolicy,\n SelectedMember,\n} from '../components/CreateRole/types';\nimport {\n MemberEntity,\n MembersData,\n PermissionsData,\n PermissionsDataSet,\n PluginInfoType,\n} from '../types';\nimport { getMembersCount } from './create-role-utils';\n\nexport const getPermissionsArray = (\n role: string,\n policies: RoleBasedPolicy[],\n): RoleBasedPolicy[] => {\n if (!policies || policies?.length === 0 || !Array.isArray(policies)) {\n return [];\n }\n return policies.filter(\n (policy: RoleBasedPolicy) =>\n policy.entityReference === role && policy.effect !== 'deny',\n );\n};\n\nexport const getPermissions = (\n role: string,\n policies: RoleBasedPolicy[],\n): number => {\n return getPermissionsArray(role, policies).length;\n};\n\nexport const getMembersString = (res: {\n users: number;\n groups: number;\n}): string => {\n let membersString = '';\n if (res.groups > 0) {\n membersString = `${res.groups} ${res.groups > 1 ? 'groups' : 'group'}`;\n }\n if (res.users > 0) {\n membersString = membersString.concat(\n membersString.length > 0 ? ', ' : '',\n `${res.users} ${res.users > 1 ? 'users' : 'user'}`,\n );\n }\n return membersString;\n};\n\nexport const getMembers = (\n members: (string | MembersData | SelectedMember)[],\n): string => {\n if (!members || members.length === 0) {\n return 'No members';\n }\n\n const res = members.reduce(\n (acc, member) => {\n if (typeof member === 'object') {\n if (member.type === 'User' || member.type === 'user') {\n acc.users++;\n } else {\n acc.groups++;\n }\n } else {\n const entity = parseEntityRef(member) as any;\n if (isUserEntity(entity)) {\n acc.users++;\n } else {\n acc.groups++;\n }\n }\n return acc;\n },\n { users: 0, groups: 0 },\n );\n\n return getMembersString(res);\n};\n\nexport const getMembersFromGroup = (group: GroupEntity): number => {\n const membersList = group.relations?.reduce((acc, relation) => {\n let temp = acc;\n if (relation.type === 'hasMember') {\n temp++;\n }\n return temp;\n }, 0);\n return membersList ?? 0;\n};\n\nexport const getPluginInfo = (\n permissions: PluginPermissionMetaData[],\n policy: RoleBasedPolicy,\n): PluginInfoType | null =>\n permissions.reduce(\n (acc: PluginInfoType | null, p: PluginPermissionMetaData) => {\n const policyData = p.policies.find(pol => {\n if (pol.policy === policy.policy) {\n if (isResourcedPolicy(pol)) {\n if (pol.resourceType === policy.permission) {\n return true;\n }\n }\n if (pol.name === policy.permission) {\n return true;\n }\n }\n return false;\n });\n if (p.pluginId && policyData) {\n return {\n pluginId: p.pluginId,\n permissionName: policyData.name || '-',\n isResourced: isResourcedPolicy(policyData) || false,\n resourceType: isResourcedPolicy(policyData)\n ? policyData.resourceType\n : '',\n usingResourceType:\n isResourcedPolicy(policyData) &&\n policyData.resourceType === policy.permission,\n };\n }\n return acc;\n },\n null,\n );\n\nconst getPolicy = (str: string) => {\n const arr = str.split('.');\n return arr[arr.length - 1];\n};\n\nconst getAllPolicies = (\n permission: string,\n allowedPolicies: RowPolicy[],\n policies: PolicyDetails[],\n) => {\n const deniedPolicies = policies?.reduce((acc, p) => {\n const perm = p.name;\n if (\n permission === perm &&\n !allowedPolicies.find(\n allowedPolicy =>\n allowedPolicy.policy.toLocaleLowerCase('en-US') ===\n p.policy?.toLocaleLowerCase('en-US'),\n )\n ) {\n acc.push({\n policy: capitalizeFirstLetter(p.policy) || 'Use',\n effect: 'deny',\n });\n }\n return acc;\n }, [] as RowPolicy[]);\n return [...(allowedPolicies || []), ...(deniedPolicies || [])];\n};\n\nexport const getPermissionsData = (\n policies: RoleBasedPolicy[],\n permissionPolicies: PluginPermissionMetaData[],\n): PermissionsData[] => {\n const data = policies.reduce(\n (acc: PermissionsDataSet[], policy: RoleBasedPolicy) => {\n if (policy?.effect === 'allow') {\n const policyStr =\n policy?.policy ?? getPolicy(policy.permission as string);\n const policyTitleCase = capitalizeFirstLetter(policyStr);\n const policyString = new Set<string>();\n const policiesSet = new Set<{ policy: string; effect: string }>();\n const pluginInfo = getPluginInfo(permissionPolicies, policy);\n if (pluginInfo?.pluginId) {\n acc.push({\n permission: pluginInfo.permissionName,\n plugin: pluginInfo.pluginId,\n policyString: policyString.add(policyTitleCase || 'Use'),\n policies: policiesSet.add({\n policy: policyTitleCase || 'Use',\n effect: policy.effect,\n }),\n isResourced: pluginInfo.isResourced,\n resourceType: pluginInfo.resourceType,\n usingResourceType: pluginInfo.usingResourceType,\n });\n }\n }\n return acc;\n },\n [],\n );\n return data.map((p: PermissionsDataSet) => ({\n ...p,\n ...(p.policyString ? { policyString: Array.from(p.policyString) } : {}),\n policies: getAllPolicies(\n p.permission,\n Array.from(p.policies),\n permissionPolicies.find(pp => pp.pluginId === p.plugin)\n ?.policies as PolicyDetails[],\n ),\n })) as PermissionsData[];\n};\n\nexport const getConditionUpperCriteria = (\n conditions: PermissionCriteria<PermissionCondition> | string,\n): string | undefined => {\n return Object.keys(conditions).find(key =>\n [criterias.allOf, criterias.anyOf, criterias.not].includes(\n key as keyof ConditionsData,\n ),\n );\n};\n\nexport const getConditionsData = (\n conditions: PermissionCriteria<PermissionCondition>,\n): ConditionsData | undefined => {\n const upperCriteria =\n getConditionUpperCriteria(conditions) ?? criterias.condition;\n\n switch (upperCriteria) {\n case criterias.allOf: {\n const allOfConditions = (conditions as AllOfCriteria<PermissionCondition>)\n .allOf;\n allOfConditions.map(aoc => {\n if (getConditionUpperCriteria(aoc)) {\n return getConditionsData(aoc);\n }\n return aoc;\n });\n return { allOf: allOfConditions as PermissionCondition[] };\n }\n case criterias.anyOf: {\n const anyOfConditions = (conditions as AnyOfCriteria<PermissionCondition>)\n .anyOf;\n anyOfConditions.map(aoc => {\n if (getConditionUpperCriteria(aoc)) {\n return getConditionsData(aoc);\n }\n return aoc;\n });\n return { anyOf: anyOfConditions as PermissionCondition[] };\n }\n case criterias.not: {\n const notCondition = (conditions as NotCriteria<PermissionCondition>).not;\n const nestedCondition = getConditionUpperCriteria(notCondition)\n ? getConditionsData(notCondition)\n : notCondition;\n return { not: nestedCondition as PermissionCondition };\n }\n default:\n return { condition: conditions as PermissionCondition };\n }\n};\n\nexport const getPoliciesData = (\n allowedPermissions: string[],\n policies: string[],\n): RowPolicy[] => {\n return policies.map(p => ({\n policy: p,\n ...(allowedPermissions.includes(p.toLocaleLowerCase('en-US'))\n ? { effect: 'allow' }\n : { effect: 'deny' }),\n }));\n};\n\nexport const getPolicyString = (policies: RowPolicy[]) => {\n const policyStr = policies.reduce((acc: string, p) => {\n if (p.effect === 'allow') return acc.concat(`${p.policy}, `);\n return acc;\n }, '');\n return policyStr.slice(0, policyStr.length - 2);\n};\n\nexport const getConditionalPermissionsData = (\n conditionalPermissions: RoleConditionalPolicyDecision<PermissionAction>[],\n permissionPolicies: PluginsPermissionPoliciesData,\n allPermissionPolicies: PluginPermissionMetaData[],\n): PermissionsData[] => {\n return conditionalPermissions.reduce((acc: any, cp) => {\n const conditions = getConditionsData(cp.conditions);\n const allowedPermissions = cp.permissionMapping.map(action =>\n action.toLocaleLowerCase('en-US'),\n );\n\n const pluginPermissionMetaData = allPermissionPolicies.find(\n pp => pp.pluginId === cp.pluginId,\n );\n\n const perms =\n pluginPermissionMetaData?.policies.filter(\n po =>\n isResourcedPolicy(po) &&\n po.resourceType === cp.resourceType &&\n allowedPermissions.includes(po.policy.toLocaleLowerCase('en-US')),\n ) ?? [];\n\n const allPolicies = (pm: string) =>\n permissionPolicies.pluginsPermissions?.[cp.pluginId]?.policies?.[pm]\n ?.policies ?? [];\n\n return [\n ...acc,\n ...(conditions\n ? perms.map((perm, index, arr) => {\n const policies = getPoliciesData(\n allowedPermissions,\n allPolicies(perm.name),\n );\n return {\n plugin: cp.pluginId,\n permission: perm.name,\n resourceType: cp.resourceType,\n isResourced: true,\n policies,\n policyString: getPolicyString(policies),\n conditions,\n ...(index === 0 ||\n !!policies.find(\n pl =>\n pl.policy.toLocaleLowerCase('en-US') ===\n arr[index - 1].policy && pl.effect === 'allow',\n )\n ? { id: cp.id }\n : {}),\n };\n })\n : []),\n ];\n }, []);\n};\n\nexport const getSelectedMember = (\n memberResource: MemberEntity | undefined,\n ref: string,\n): SelectedMember => {\n if (memberResource) {\n return {\n id: memberResource.metadata.etag as string,\n ref: stringifyEntityRef(memberResource),\n label:\n memberResource.spec.profile?.displayName ??\n memberResource.metadata.name,\n etag: memberResource.metadata.etag as string,\n type: memberResource.kind,\n namespace: memberResource.metadata.namespace as string,\n members: getMembersCount(memberResource),\n };\n } else if (ref) {\n const { kind, namespace, name } = parseEntityRef(ref);\n return {\n id: `${kind}-${namespace}-${name}`,\n ref,\n label: name,\n etag: `${kind}-${namespace}-${name}`,\n type: kind,\n namespace: namespace,\n members: kind === 'group' ? 0 : undefined,\n };\n }\n return {} as SelectedMember;\n};\n\nexport const isSamePermissionPolicy = (\n a: RoleBasedPolicy,\n b: RoleBasedPolicy,\n) =>\n a.entityReference === b.entityReference &&\n a.permission === b.permission &&\n a.policy === b.policy &&\n a.effect === b.effect;\n\nexport const onlyInLeft = (\n left: RoleBasedPolicy[],\n right: RoleBasedPolicy[],\n compareFunction: (a: RoleBasedPolicy, b: RoleBasedPolicy) => boolean,\n) =>\n left.filter(\n leftValue =>\n !right.some(rightValue => compareFunction(leftValue, rightValue)),\n );\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rbac-utils.esm.js","sources":["../../src/utils/rbac-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 {\n GroupEntity,\n isUserEntity,\n parseEntityRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport {\n AllOfCriteria,\n AnyOfCriteria,\n NotCriteria,\n PermissionCondition,\n PermissionCriteria,\n} from '@backstage/plugin-permission-common';\n\nimport { capitalizeFirstLetter } from './string-utils';\n\nimport {\n isResourcedPolicy,\n PermissionAction,\n PluginPermissionMetaData,\n PolicyDetails,\n RoleBasedPolicy,\n RoleConditionalPolicyDecision,\n} from '@backstage-community/plugin-rbac-common';\n\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../translations';\n\nimport { criterias } from '../components/ConditionalAccess/const';\nimport { ConditionsData } from '../components/ConditionalAccess/types';\nimport {\n PluginsPermissionPoliciesData,\n RowPolicy,\n SelectedMember,\n} from '../components/CreateRole/types';\nimport {\n MemberEntity,\n MembersData,\n PermissionsData,\n PermissionsDataSet,\n PluginInfoType,\n} from '../types';\nimport { getMembersCount } from './create-role-utils';\n\nexport const getPermissionsArray = (\n role: string,\n policies: RoleBasedPolicy[],\n): RoleBasedPolicy[] => {\n if (!policies || policies?.length === 0 || !Array.isArray(policies)) {\n return [];\n }\n return policies.filter(\n (policy: RoleBasedPolicy) =>\n policy.entityReference === role && policy.effect !== 'deny',\n );\n};\n\nexport const getPermissions = (\n role: string,\n policies: RoleBasedPolicy[],\n): number => {\n return getPermissionsArray(role, policies).length;\n};\n\nexport const getMembersString = (\n res: {\n users: number;\n groups: number;\n },\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): string => {\n let membersString = '';\n if (res.groups > 0) {\n const groupsText = res.groups > 1 ? t('common.groups') : t('common.group');\n membersString = `${res.groups} ${groupsText}`;\n }\n if (res.users > 0) {\n const usersText = res.users > 1 ? t('common.users') : t('common.user');\n membersString = membersString.concat(\n membersString.length > 0 ? ', ' : '',\n `${res.users} ${usersText}`,\n );\n }\n return membersString;\n};\n\nexport const getMembers = (\n members: (string | MembersData | SelectedMember)[],\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): string => {\n if (!members || members.length === 0) {\n return t('common.noMembers');\n }\n\n const res = members.reduce(\n (acc, member) => {\n if (typeof member === 'object') {\n if (member.type === 'User' || member.type === 'user') {\n acc.users++;\n } else {\n acc.groups++;\n }\n } else {\n const entity = parseEntityRef(member) as any;\n if (isUserEntity(entity)) {\n acc.users++;\n } else {\n acc.groups++;\n }\n }\n return acc;\n },\n { users: 0, groups: 0 },\n );\n\n return getMembersString(res, t);\n};\n\nexport const getMembersFromGroup = (group: GroupEntity): number => {\n const membersList = group.relations?.reduce((acc, relation) => {\n let temp = acc;\n if (relation.type === 'hasMember') {\n temp++;\n }\n return temp;\n }, 0);\n return membersList ?? 0;\n};\n\nexport const getPluginInfo = (\n permissions: PluginPermissionMetaData[],\n policy: RoleBasedPolicy,\n): PluginInfoType | null =>\n permissions.reduce(\n (acc: PluginInfoType | null, p: PluginPermissionMetaData) => {\n const policyData = p.policies.find(pol => {\n if (pol.policy === policy.policy) {\n if (isResourcedPolicy(pol)) {\n if (pol.resourceType === policy.permission) {\n return true;\n }\n }\n if (pol.name === policy.permission) {\n return true;\n }\n }\n return false;\n });\n if (p.pluginId && policyData) {\n return {\n pluginId: p.pluginId,\n permissionName: policyData.name || '-',\n isResourced: isResourcedPolicy(policyData) || false,\n resourceType: isResourcedPolicy(policyData)\n ? policyData.resourceType\n : '',\n usingResourceType:\n isResourcedPolicy(policyData) &&\n policyData.resourceType === policy.permission,\n };\n }\n return acc;\n },\n null,\n );\n\nconst getPolicy = (str: string) => {\n const arr = str.split('.');\n return arr[arr.length - 1];\n};\n\nconst getAllPolicies = (\n permission: string,\n allowedPolicies: RowPolicy[],\n policies: PolicyDetails[],\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n locale = 'en-US',\n) => {\n const deniedPolicies = policies?.reduce((acc, p) => {\n const perm = p.name;\n if (\n permission === perm &&\n !allowedPolicies.find(\n allowedPolicy =>\n allowedPolicy.policy.toLocaleLowerCase(locale) ===\n p.policy?.toLocaleLowerCase(locale),\n )\n ) {\n acc.push({\n policy: capitalizeFirstLetter(p.policy) || t('common.use'),\n effect: 'deny',\n });\n }\n return acc;\n }, [] as RowPolicy[]);\n return [...(allowedPolicies || []), ...(deniedPolicies || [])];\n};\n\nexport const getPermissionsData = (\n policies: RoleBasedPolicy[],\n permissionPolicies: PluginPermissionMetaData[],\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n locale = 'en',\n): PermissionsData[] => {\n const data = policies.reduce(\n (acc: PermissionsDataSet[], policy: RoleBasedPolicy) => {\n if (policy?.effect === 'allow') {\n const policyStr =\n policy?.policy ?? getPolicy(policy.permission as string);\n const policyTitleCase = capitalizeFirstLetter(policyStr);\n const policyString = new Set<string>();\n const policiesSet = new Set<{ policy: string; effect: string }>();\n const pluginInfo = getPluginInfo(permissionPolicies, policy);\n if (pluginInfo?.pluginId) {\n acc.push({\n permission: pluginInfo.permissionName,\n plugin: pluginInfo.pluginId,\n policyString: policyString.add(policyTitleCase || t('common.use')),\n policies: policiesSet.add({\n policy: policyTitleCase || t('common.use'),\n effect: policy.effect,\n }),\n isResourced: pluginInfo.isResourced,\n resourceType: pluginInfo.resourceType,\n usingResourceType: pluginInfo.usingResourceType,\n });\n }\n }\n return acc;\n },\n [],\n );\n return data.map((p: PermissionsDataSet) => ({\n ...p,\n ...(p.policyString ? { policyString: Array.from(p.policyString) } : {}),\n policies: getAllPolicies(\n p.permission,\n Array.from(p.policies),\n permissionPolicies.find(pp => pp.pluginId === p.plugin)\n ?.policies as PolicyDetails[],\n t,\n locale,\n ),\n })) as PermissionsData[];\n};\n\nexport const getConditionUpperCriteria = (\n conditions: PermissionCriteria<PermissionCondition> | string,\n): string | undefined => {\n return Object.keys(conditions).find(key =>\n [criterias.allOf, criterias.anyOf, criterias.not].includes(\n key as keyof ConditionsData,\n ),\n );\n};\n\nexport const getConditionsData = (\n conditions: PermissionCriteria<PermissionCondition>,\n): ConditionsData | undefined => {\n const upperCriteria =\n getConditionUpperCriteria(conditions) ?? criterias.condition;\n\n switch (upperCriteria) {\n case criterias.allOf: {\n const allOfConditions = (conditions as AllOfCriteria<PermissionCondition>)\n .allOf;\n allOfConditions.map(aoc => {\n if (getConditionUpperCriteria(aoc)) {\n return getConditionsData(aoc);\n }\n return aoc;\n });\n return { allOf: allOfConditions as PermissionCondition[] };\n }\n case criterias.anyOf: {\n const anyOfConditions = (conditions as AnyOfCriteria<PermissionCondition>)\n .anyOf;\n anyOfConditions.map(aoc => {\n if (getConditionUpperCriteria(aoc)) {\n return getConditionsData(aoc);\n }\n return aoc;\n });\n return { anyOf: anyOfConditions as PermissionCondition[] };\n }\n case criterias.not: {\n const notCondition = (conditions as NotCriteria<PermissionCondition>).not;\n const nestedCondition = getConditionUpperCriteria(notCondition)\n ? getConditionsData(notCondition)\n : notCondition;\n return { not: nestedCondition as PermissionCondition };\n }\n default:\n return { condition: conditions as PermissionCondition };\n }\n};\n\nexport const getPoliciesData = (\n allowedPermissions: string[],\n policies: string[],\n locale = 'en',\n): RowPolicy[] => {\n return policies.map(p => ({\n policy: p,\n ...(allowedPermissions.includes(p.toLocaleLowerCase(locale))\n ? { effect: 'allow' }\n : { effect: 'deny' }),\n }));\n};\n\nexport const getPolicyString = (policies: RowPolicy[]) => {\n const policyStr = policies.reduce((acc: string, p) => {\n if (p.effect === 'allow') return acc.concat(`${p.policy}, `);\n return acc;\n }, '');\n return policyStr.slice(0, policyStr.length - 2);\n};\n\nexport const getConditionalPermissionsData = (\n conditionalPermissions: RoleConditionalPolicyDecision<PermissionAction>[],\n permissionPolicies: PluginsPermissionPoliciesData,\n allPermissionPolicies: PluginPermissionMetaData[],\n locale = 'en-US',\n): PermissionsData[] => {\n return conditionalPermissions.reduce((acc: any, cp) => {\n const conditions = getConditionsData(cp.conditions);\n const allowedPermissions = cp.permissionMapping.map(action =>\n action.toLocaleLowerCase(locale),\n );\n\n const pluginPermissionMetaData = allPermissionPolicies.find(\n pp => pp.pluginId === cp.pluginId,\n );\n\n const perms =\n pluginPermissionMetaData?.policies.filter(\n po =>\n isResourcedPolicy(po) &&\n po.resourceType === cp.resourceType &&\n allowedPermissions.includes(po.policy.toLocaleLowerCase(locale)),\n ) ?? [];\n\n const allPolicies = (pm: string) =>\n permissionPolicies.pluginsPermissions?.[cp.pluginId]?.policies?.[pm]\n ?.policies ?? [];\n\n return [\n ...acc,\n ...(conditions\n ? perms.map((perm, index, arr) => {\n const policies = getPoliciesData(\n allowedPermissions,\n allPolicies(perm.name),\n );\n return {\n plugin: cp.pluginId,\n permission: perm.name,\n resourceType: cp.resourceType,\n isResourced: true,\n policies,\n policyString: getPolicyString(policies),\n conditions,\n ...(index === 0 ||\n !!policies.find(\n pl =>\n pl.policy.toLocaleLowerCase(locale) ===\n arr[index - 1].policy && pl.effect === 'allow',\n )\n ? { id: cp.id }\n : {}),\n };\n })\n : []),\n ];\n }, []);\n};\n\nexport const getSelectedMember = (\n memberResource: MemberEntity | undefined,\n ref: string,\n): SelectedMember => {\n if (memberResource) {\n return {\n id: memberResource.metadata.etag as string,\n ref: stringifyEntityRef(memberResource),\n label:\n memberResource.spec.profile?.displayName ??\n memberResource.metadata.name,\n etag: memberResource.metadata.etag as string,\n type: memberResource.kind,\n namespace: memberResource.metadata.namespace as string,\n members: getMembersCount(memberResource),\n };\n } else if (ref) {\n const { kind, namespace, name } = parseEntityRef(ref);\n return {\n id: `${kind}-${namespace}-${name}`,\n ref,\n label: name,\n etag: `${kind}-${namespace}-${name}`,\n type: kind,\n namespace: namespace,\n members: kind === 'group' ? 0 : undefined,\n };\n }\n return {} as SelectedMember;\n};\n\nexport const isSamePermissionPolicy = (\n a: RoleBasedPolicy,\n b: RoleBasedPolicy,\n) =>\n a.entityReference === b.entityReference &&\n a.permission === b.permission &&\n a.policy === b.policy &&\n a.effect === b.effect;\n\nexport const onlyInLeft = (\n left: RoleBasedPolicy[],\n right: RoleBasedPolicy[],\n compareFunction: (a: RoleBasedPolicy, b: RoleBasedPolicy) => boolean,\n) =>\n left.filter(\n leftValue =>\n !right.some(rightValue => compareFunction(leftValue, rightValue)),\n );\n"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { parseEntityRef } from '@backstage/catalog-model';
|
|
2
2
|
|
|
3
|
-
const createPermissions = async (newPermissions, rbacApi, errorMsgPrefix) => {
|
|
3
|
+
const createPermissions = async (newPermissions, rbacApi, t, errorMsgPrefix) => {
|
|
4
4
|
if (newPermissions.length > 0) {
|
|
5
5
|
const permissionsRes = await rbacApi.createPolicies(newPermissions);
|
|
6
6
|
if (permissionsRes.error) {
|
|
7
7
|
throw new Error(
|
|
8
|
-
`${errorMsgPrefix || "
|
|
8
|
+
`${errorMsgPrefix || t("common.unableToCreatePermissionPolicies")} ${permissionsRes.error.message}`
|
|
9
9
|
);
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
|
-
const removePermissions = async (name, deletePermissions, rbacApi) => {
|
|
13
|
+
const removePermissions = async (name, deletePermissions, rbacApi, t) => {
|
|
14
14
|
if (deletePermissions.length > 0) {
|
|
15
15
|
const permissionsRes = await rbacApi.deletePolicies(
|
|
16
16
|
name,
|
|
@@ -18,12 +18,12 @@ const removePermissions = async (name, deletePermissions, rbacApi) => {
|
|
|
18
18
|
);
|
|
19
19
|
if (permissionsRes.error) {
|
|
20
20
|
throw new Error(
|
|
21
|
-
|
|
21
|
+
`${t("common.unableToDeletePermissionPolicies")} ${permissionsRes.error.message}`
|
|
22
22
|
);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
|
-
const removeConditions = async (deleteConditions, rbacApi) => {
|
|
26
|
+
const removeConditions = async (deleteConditions, rbacApi, t) => {
|
|
27
27
|
if (deleteConditions.length > 0) {
|
|
28
28
|
const promises = deleteConditions.map(
|
|
29
29
|
(cid) => rbacApi.deleteConditionalPolicies(cid)
|
|
@@ -32,12 +32,12 @@ const removeConditions = async (deleteConditions, rbacApi) => {
|
|
|
32
32
|
const cpErr = cppRes.map((r) => r.error?.message).filter((m) => m);
|
|
33
33
|
if (cpErr.length > 0) {
|
|
34
34
|
throw new Error(
|
|
35
|
-
|
|
35
|
+
`${t("common.unableToRemoveConditions")} ${cpErr.join("\n")}`
|
|
36
36
|
);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
|
-
const modifyConditions = async (updateConditions, rbacApi) => {
|
|
40
|
+
const modifyConditions = async (updateConditions, rbacApi, t) => {
|
|
41
41
|
if (updateConditions.length > 0) {
|
|
42
42
|
const promises = updateConditions.map(
|
|
43
43
|
({ id, updateCondition }) => rbacApi.updateConditionalPolicies(id, updateCondition)
|
|
@@ -45,11 +45,13 @@ const modifyConditions = async (updateConditions, rbacApi) => {
|
|
|
45
45
|
const cppRes = await Promise.all(promises);
|
|
46
46
|
const cpErr = cppRes.map((r) => r.error?.message).filter((m) => m);
|
|
47
47
|
if (cpErr.length > 0) {
|
|
48
|
-
throw new Error(
|
|
48
|
+
throw new Error(
|
|
49
|
+
`${t("common.unableToUpdateConditions")} ${cpErr.join("\n")}`
|
|
50
|
+
);
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
};
|
|
52
|
-
const createConditions = async (newConditions, rbacApi, errorMsgPrefix) => {
|
|
54
|
+
const createConditions = async (newConditions, rbacApi, t, errorMsgPrefix) => {
|
|
53
55
|
if (newConditions.length > 0) {
|
|
54
56
|
const promises = newConditions.map(
|
|
55
57
|
(cpp) => rbacApi.createConditionalPermission(cpp)
|
|
@@ -58,16 +60,19 @@ const createConditions = async (newConditions, rbacApi, errorMsgPrefix) => {
|
|
|
58
60
|
const cpErr = cppRes.map((r) => r.error?.message).filter((m) => m);
|
|
59
61
|
if (cpErr.length > 0) {
|
|
60
62
|
throw new Error(
|
|
61
|
-
`${errorMsgPrefix || "
|
|
63
|
+
`${errorMsgPrefix || t("common.unableToAddConditions")} ${cpErr.join("\n")}`
|
|
62
64
|
);
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
};
|
|
66
|
-
const navigateTo = (navigate, roleName, rName, action, step) => {
|
|
68
|
+
const navigateTo = (navigate, t, roleName, rName, action, step) => {
|
|
67
69
|
const currentRoleName = rName || roleName;
|
|
68
70
|
const stateProp = currentRoleName && action ? {
|
|
69
71
|
state: {
|
|
70
|
-
toastMessage:
|
|
72
|
+
toastMessage: t("common.roleActionSuccessfully", {
|
|
73
|
+
roleName: currentRoleName,
|
|
74
|
+
action
|
|
75
|
+
})
|
|
71
76
|
}
|
|
72
77
|
} : undefined;
|
|
73
78
|
if (step && currentRoleName) {
|
|
@@ -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';\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 || '
|
|
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';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nimport { RBACAPI } from '../api/RBACBackendClient';\nimport {\n RoleBasedConditions,\n RoleError,\n UpdatedConditionsData,\n} from '../types';\nimport { NavigateFunction } from 'react-router-dom';\nimport { rbacTranslationRef } from '../translations';\n\nexport const createPermissions = async (\n newPermissions: RoleBasedPolicy[],\n rbacApi: RBACAPI,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\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 || t('common.unableToCreatePermissionPolicies')} ${\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 t: TranslationFunction<typeof rbacTranslationRef.T>,\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 `${t('common.unableToDeletePermissionPolicies')} ${\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 t: TranslationFunction<typeof rbacTranslationRef.T>,\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 `${t('common.unableToRemoveConditions')} ${cpErr.join('\\n')}`,\n );\n }\n }\n};\n\nexport const modifyConditions = async (\n updateConditions: UpdatedConditionsData,\n rbacApi: RBACAPI,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\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(\n `${t('common.unableToUpdateConditions')} ${cpErr.join('\\n')}`,\n );\n }\n }\n};\n\nexport const createConditions = async (\n newConditions: RoleBasedConditions[],\n rbacApi: RBACAPI,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\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 || t('common.unableToAddConditions')\n } ${cpErr.join('\\n')}`,\n );\n }\n }\n};\n\nexport const navigateTo = (\n navigate: NavigateFunction,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\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: t('common.roleActionSuccessfully' as any, {\n roleName: currentRoleName,\n action,\n }),\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-utils.esm.js","sources":["../../src/utils/string-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 */\nfunction capitalizeFirstLetter(word: string) {\n return word.charAt(0).toLocaleUpperCase('en
|
|
1
|
+
{"version":3,"file":"string-utils.esm.js","sources":["../../src/utils/string-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 */\nfunction capitalizeFirstLetter(word: string, locale?: string) {\n return word.charAt(0).toLocaleUpperCase(locale || 'en') + word.slice(1);\n}\n\nexport { capitalizeFirstLetter };\n"],"names":[],"mappings":"AAeA,SAAS,qBAAA,CAAsB,MAAc,MAAiB,EAAA;AAC5D,EAAO,OAAA,IAAA,CAAK,MAAO,CAAA,CAAC,CAAE,CAAA,iBAAA,CAA4B,IAAI,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AACxE;;;;"}
|