@backstage-community/plugin-rbac 1.48.0 → 1.49.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +30 -0
  3. package/dist/alpha/apis.esm.js +29 -0
  4. package/dist/alpha/apis.esm.js.map +1 -0
  5. package/dist/alpha/navItems.esm.js +14 -0
  6. package/dist/alpha/navItems.esm.js.map +1 -0
  7. package/dist/alpha/pages.esm.js +14 -0
  8. package/dist/alpha/pages.esm.js.map +1 -0
  9. package/dist/{translations → alpha/translations}/de.esm.js +79 -79
  10. package/dist/alpha/translations/de.esm.js.map +1 -0
  11. package/dist/alpha/translations/es.esm.js +178 -0
  12. package/dist/alpha/translations/es.esm.js.map +1 -0
  13. package/dist/{translations → alpha/translations}/fr.esm.js +1 -0
  14. package/dist/alpha/translations/fr.esm.js.map +1 -0
  15. package/dist/alpha/translations/index.esm.js.map +1 -0
  16. package/dist/{translations → alpha/translations}/it.esm.js +1 -0
  17. package/dist/alpha/translations/it.esm.js.map +1 -0
  18. package/dist/{translations → alpha/translations}/ja.esm.js +2 -1
  19. package/dist/alpha/translations/ja.esm.js.map +1 -0
  20. package/dist/{translations → alpha/translations}/ref.esm.js +1 -0
  21. package/dist/alpha/translations/ref.esm.js.map +1 -0
  22. package/dist/alpha.d.ts +79 -1
  23. package/dist/alpha.esm.js +30 -2
  24. package/dist/alpha.esm.js.map +1 -1
  25. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
  26. package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
  27. package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
  28. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
  29. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
  30. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
  31. package/dist/components/RbacPage.esm.js +1 -1
  32. package/dist/components/RbacPage.esm.js.map +1 -1
  33. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
  34. package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
  35. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
  36. package/dist/components/Trans.esm.js.map +1 -1
  37. package/dist/hooks/useTranslation.esm.js +2 -2
  38. package/dist/hooks/useTranslation.esm.js.map +1 -1
  39. package/dist/package.json.esm.js +154 -0
  40. package/dist/package.json.esm.js.map +1 -0
  41. package/dist/utils/conditional-access-utils.esm.js.map +1 -1
  42. package/dist/utils/create-role-utils.esm.js.map +1 -1
  43. package/dist/utils/rbac-utils.esm.js.map +1 -1
  44. package/dist/utils/role-form-utils.esm.js.map +1 -1
  45. package/package.json +13 -4
  46. package/dist/translations/de.esm.js.map +0 -1
  47. package/dist/translations/es.esm.js +0 -178
  48. package/dist/translations/es.esm.js.map +0 -1
  49. package/dist/translations/fr.esm.js.map +0 -1
  50. package/dist/translations/index.esm.js.map +0 -1
  51. package/dist/translations/it.esm.js.map +0 -1
  52. package/dist/translations/ja.esm.js.map +0 -1
  53. package/dist/translations/ref.esm.js.map +0 -1
  54. /package/dist/{translations → alpha/translations}/index.esm.js +0 -0
@@ -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';\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":";;;;;AA4Ca,MAAA,MAAA,GAAS,CAAC,GAAA,EAAe,QAAmC,KAAA;AACvE,EAAA,OAAO,GAAI,CAAA,MAAA;AAAA,IACT,CAAC,CAAA,EAAG,CAAG,EAAA,IAAA,KAAS,CAAM,KAAA,IAAA,CAAK,SAAU,CAAA,CAAA,CAAA,KAAK,QAAS,CAAA,CAAC,CAAM,KAAA,QAAA,CAAS,CAAC,CAAC;AAAA,GACvE;AACF;AAEa,MAAA,WAAA,GAAc,CAAC,MAAiC,KAAA;AAC3D,EAAO,OAAA;AAAA,IACL,gBAAA,EAAkB,OAAO,eAAgB,CAAA,GAAA;AAAA,MACvC,CAAC,QAAwB,GAAI,CAAA;AAAA,KAC/B;AAAA,IACA,IAAA,EAAM,GAAG,MAAO,CAAA,IAAI,IAAI,MAAO,CAAA,SAAS,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,IACvD,QAAU,EAAA;AAAA,MACR,aAAa,MAAO,CAAA,WAAA;AAAA,MACpB,OAAO,MAAO,CAAA;AAAA;AAChB,GACF;AACF;AAEO,MAAM,mBAAsB,GAAA,CACjC,CAEA,KAAA,GAAA,CAAI,MAAO,CAAA;AAAA,EACT,MAAM,GAAI,CAAA,MAAA,GAAS,QAAS,CAAA,CAAA,CAAE,qBAAqB,CAAC,CAAA;AAAA,EACpD,eAAA,EAAiB,IAAI,KAAM,EAAA,CAAE,IAAI,CAAG,EAAA,CAAA,CAAE,yBAAyB,CAAC,CAAA;AAAA,EAChE,eAAA,EAAiB,IAAI,KAAM,EAAA,CAAE,IAAI,CAAG,EAAA,CAAA,CAAE,yBAAyB,CAAC,CAAA;AAAA,EAChE,sBAAA,EAAwB,GACrB,CAAA,KAAA,EACA,CAAA,EAAA;AAAA,IACC,GAAA,CAAI,MAAO,EAAA,CAAE,KAAM,CAAA;AAAA,MACjB,QAAQ,GAAI,CAAA,MAAA,GAAS,QAAS,CAAA,CAAA,CAAE,uBAAuB,CAAC,CAAA;AAAA,MACxD,YAAY,GAAI,CAAA,MAAA,GAAS,QAAS,CAAA,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,MAChE,UAAU,GACP,CAAA,KAAA,EACA,CAAA,GAAA,CAAI,CAAC,CACL,CAAA,EAAA;AAAA,QACC,IACG,MAAO,EAAA,CACP,MAAM,EAAE,MAAA,EAAQ,IAAI,MAAO,EAAA,EAAG,QAAQ,GAAI,CAAA,MAAA,IAAU,CAAA,CACpD,KAAK,CAAK,CAAA,KAAA,CAAA,CAAE,WAAW,OAAO;AAAA;AACnC,KACH;AAAA,GACH,CACC,IAAI,CAAC;AACV,CAAC;AAEU,MAAA,eAAA,GAAkB,CAAC,MAAyB,KAAA;AACvD,EAAO,OAAA,MAAA,CAAO,SAAS,OACnB,GAAA,MAAA,CAAO,WAAW,MAAO,CAAA,CAAC,KAAU,QAA+B,KAAA;AACjE,IAAA,IAAI,IAAO,GAAA,GAAA;AACX,IAAI,IAAA,QAAA,CAAS,SAAS,WAAa,EAAA;AACjC,MAAA,IAAA,EAAA;AAAA;AAEF,IAAO,OAAA,IAAA;AAAA,GACT,EAAG,CAAC,CACJ,GAAA,SAAA;AACN;AAEa,MAAA,oBAAA,GAAuB,CAAC,MAAyB,KAAA;AAC5D,EAAO,OAAA,MAAA,CAAO,SAAS,OACnB,GAAA,MAAA,CAAO,WAAW,MAAO,CAAA,CAAC,KAAU,QAA+B,KAAA;AACjE,IAAA,IAAI,IAAO,GAAA,GAAA;AACX,IAAI,IAAA,QAAA,CAAS,SAAS,SAAW,EAAA;AAC/B,MAAA,IAAA,EAAA;AAAA;AAEF,IAAO,OAAA,IAAA;AAAA,GACT,EAAG,CAAC,CACJ,GAAA,SAAA;AACN;AAEa,MAAA,mBAAA,GAAsB,CAAC,MAAyB,KAAA;AAC3D,EAAO,OAAA,MAAA,CAAO,SAAS,OACnB,GAAA,MAAA,CAAO,WAAW,MAAO,CAAA,CAAC,KAAU,QAA+B,KAAA;AACjE,IAAA,IAAI,IAAO,GAAA,GAAA;AACX,IAAI,IAAA,QAAA,CAAS,SAAS,UAAY,EAAA;AAChC,MAAA,IAAA,EAAA;AAAA;AAEF,IAAO,OAAA,IAAA;AAAA,GACT,EAAG,CAAC,CACJ,GAAA,SAAA;AACN;AAEa,MAAA,qBAAA,GAAwB,CACnC,QACuB,KAAA;AACvB,EAAA,OAAO,QAAS,CAAA,MAAA;AAAA,IACd,CAAC,QAA4B,MAA0B,KAAA;AACrD,MAAA,MAAM,aAAa,MAAO,CAAA,IAAA;AAC1B,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,CAAC,UAAU,GAAG,QAAS,CAAA,MAAA;AAAA,UACrB,CAAC,aAA2D,GAAQ,KAAA;AAClE,YAAA,MAAM,OAAO,GAAI,CAAA,IAAA;AACjB,YAAA,IAAI,UAAe,KAAA,IAAA;AACjB,cAAO,OAAA;AAAA,gBACL,QAAU,EAAA,MAAA;AAAA,kBACR;AAAA,oBACE,GAAG,WAAY,CAAA,QAAA;AAAA,oBACf,qBAAA,CAAsB,IAAI,MAAgB;AAAA,mBAC5C;AAAA,kBACA,CAAO,GAAA,KAAA;AAAA,iBACT;AAAA,gBACA,WAAA,EAAa,kBAAkB,GAAG,CAAA;AAAA,gBAClC,YAAc,EAAA,iBAAA,CAAkB,GAAG,CAAA,GAAI,IAAI,YAAe,GAAA;AAAA,eAC5D;AACF,YAAO,OAAA,WAAA;AAAA,WACT;AAAA,UACA,EAAE,QAAA,EAAU,EAAC,EAAG,aAAa,KAAM;AAAA;AACrC,OACF;AAAA,KACF;AAAA,IACA;AAAC,GACH;AACF;AAEa,MAAA,gCAAA,GAAmC,CAC9C,yBACkC,KAAA;AAClC,EAAA,MAAM,UAAoB,yBAA0B,CAAA,GAAA;AAAA,IAClD,cAAY,QAAS,CAAA;AAAA,GACvB;AACA,EAAA,MAAM,qBAAqB,yBAA0B,CAAA,MAAA;AAAA,IACnD,CAAC,GAAyB,EAAA,EAAA,EAAI,KAAU,KAAA;AACtC,MAAA,MAAM,cAAc,EAAG,CAAA,QAAA,CAAS,MAAO,CAAA,CAAC,QAAkB,GAAQ,KAAA;AAChE,QAAA,MAAM,aAAa,GAAI,CAAA,IAAA;AACvB,QAAO,OAAA,CAAC,GAAG,MAAA,EAAQ,UAAU,CAAA;AAAA,OAC/B,EAAG,EAAE,CAAA;AACL,MAAO,OAAA;AAAA,QACL,GAAG,GAAA;AAAA,QACH,CAAC,OAAA,CAAQ,KAAK,CAAC,GAAG;AAAA,UAChB,WAAA,EAAa,eAAe,EAAC;AAAA,UAC7B,QAAU,EAAA;AAAA,YACR,GAAI,EAAG,CAAA,QAAA,GAAW,sBAAsB,EAAG,CAAA,QAAQ,IAAI;AAAC;AAC1D;AACF,OACF;AAAA,KACF;AAAA,IACA;AAAC,GACH;AACA,EAAO,OAAA,EAAE,SAAS,kBAAmB,EAAA;AACvC;AAEO,MAAM,yBAA4B,GAAA,CACvC,MACA,EAAA,MAAA,GAAS,OACa,KAAA;AACtB,EAAA,MAAM,EAAE,IAAA,EAAM,IAAM,EAAA,SAAA,EAAW,wBAA2B,GAAA,MAAA;AAE1D,EAAA,OAAO,sBAAuB,CAAA,MAAA;AAAA,IAC5B,CAAC,KAAwB,mBAAwB,KAAA;AAC/C,MAAM,MAAA;AAAA,QACJ,UAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACE,GAAA,mBAAA;AACJ,MAAA,MAAM,yBAAyB,QAAS,CAAA,MAAA;AAAA,QACtC,CAAC,MAAyB,MAAW,KAAA;AACnC,UAAA,IAAI,MAAO,CAAA,MAAA,KAAW,OAAW,IAAA,CAAC,UAAY,EAAA;AAC5C,YAAO,OAAA;AAAA,cACL,GAAG,IAAA;AAAA,cACH;AAAA,gBACE,iBAAiB,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,SAAS,IAAI,IAAI,CAAA,CAAA;AAAA,gBAC7C,YACE,YAAgB,IAAA,iBAAA,GACZ,GAAG,YAAY,CAAA,CAAA,GACf,GAAG,UAAU,CAAA,CAAA;AAAA,gBACnB,MAAQ,EAAA,MAAA,CAAO,MAAO,CAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,gBAC9C,MAAQ,EAAA;AAAA;AACV,aACF;AAAA;AAEF,UAAO,OAAA,IAAA;AAAA,SACT;AAAA,QACA;AAAC,OACH;AACA,MAAA,OAAO,CAAC,GAAG,GAAK,EAAA,GAAG,sBAAsB,CAAA;AAAA,KAC3C;AAAA,IACA;AAAC,GACH;AACF;AAEO,MAAM,oCAAuC,GAAA,CAClD,MACA,EAAA,MAAA,GAAS,OACN,KAAA;AACH,EAAA,MAAM,EAAE,IAAA,EAAM,IAAM,EAAA,SAAA,EAAW,wBAA2B,GAAA,MAAA;AAE1D,EAAA,OAAO,sBAAuB,CAAA,MAAA;AAAA,IAC5B,CAAC,KAA4B,mBAAyC,KAAA;AACpE,MAAA,MAAM,EAAE,QAAU,EAAA,WAAA,EAAa,MAAQ,EAAA,UAAA,EAAY,cACjD,GAAA,mBAAA;AACF,MAAA,MAAM,iBAAoB,GAAA,QAAA,CAAS,MAAO,CAAA,CAAC,MAAgB,MAAW,KAAA;AACpE,QAAI,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA;AAC7B,UAAA,OAAO,CAAC,GAAG,IAAA,EAAM,OAAO,MAAO,CAAA,iBAAA,CAAkB,MAAM,CAAC,CAAA;AAAA;AAE1D,QAAO,OAAA,IAAA;AAAA,OACT,EAAG,EAAE,CAAA;AACL,MAAA,OAAO,eAAe,UAClB,GAAA;AAAA,QACE,GAAG,GAAA;AAAA,QACH;AAAA,UACE,MAAQ,EAAA,aAAA;AAAA,UACR,eAAe,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,SAAS,IAAI,IAAI,CAAA,CAAA;AAAA,UAC3C,QAAA,EAAU,GAAG,MAAM,CAAA,CAAA;AAAA,UACnB,YAAA,EAAc,GAAG,YAAY,CAAA,CAAA;AAAA,UAC7B,iBAAA;AAAA,UACA,UACE,EAAA,MAAA,CAAO,IAAK,CAAA,UAAU,CAAE,CAAA,CAAC,CAAM,KAAA,SAAA,CAAU,SACrC,GAAA,EAAE,GAAG,UAAA,CAAW,WAChB,GAAA;AAAA;AACR,OAEF,GAAA,GAAA;AAAA,KACN;AAAA,IACA;AAAC,GACH;AACF;AAEa,MAAA,6BAAA,GAAgC,CAC3C,MAAA,EACA,aAC0B,KAAA;AAC1B,EAAM,MAAA,uBAAA,GAA0B,cAAc,sBAAuB,CAAA,MAAA;AAAA,IACnE,SAAO,GAAI,CAAA;AAAA,GACb;AAEA,EAAA,MAAM,mBAAmB,MAAO,CAAA,sBAAA,CAAuB,MAAO,CAAA,CAAA,GAAA,KAAO,IAAI,EAAE,CAAA;AAE3E,EAAO,OAAA,gBAAA,CAAiB,MAAS,GAAA,CAAA,GAC7B,gBAAiB,CAAA,MAAA;AAAA,IACf,CACE,KACA,SACG,KAAA;AACH,MAAA,MAAM,kBAAkB,uBAAwB,CAAA,IAAA;AAAA,QAC9C,CAAA,CAAA,KAAK,CAAE,CAAA,EAAA,KAAO,SAAU,CAAA;AAAA,OAC1B;AAEA,MAAA,IAAI,mBAAmB,SAAU,CAAA,EAAA;AAC/B,QAAO,OAAA;AAAA,UACL,GAAG,GAAA;AAAA,UACH;AAAA,YACE,IAAI,SAAU,CAAA,EAAA;AAAA,YACd,iBAAiB,oCAAqC,CAAA;AAAA,cACpD,GAAG,MAAA;AAAA,cACH,sBAAA,EAAwB,CAAC,SAAS;AAAA,aACnC,EAAE,CAAC;AAAA;AACN,SACF;AACF,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA;AAAC,MAEH,EAAC;AACP;AAEa,MAAA,yBAAA,GAA4B,CAAC,MAA2B,KAAA;AACnE,EAAM,MAAA,SAAA,GAAY,EAAE,GAAG,MAAO,EAAA;AAC9B,EAAM,MAAA,qBAAA,GAAwB,OAAO,sBAAuB,CAAA,MAAA;AAAA,IAC1D,CAAA,GAAA,KAAO,CAAC,GAAI,CAAA;AAAA,GACd;AACA,EAAA,SAAA,CAAU,sBAAyB,GAAA,qBAAA;AACnC,EAAA,OAAO,qCAAqC,SAAS,CAAA;AACvD;AAEa,MAAA,gCAAA,GAAmC,CAC9C,MAAA,EACA,aACG,KAAA;AACH,EAAM,MAAA,oBAAA,GAAuB,aAAc,CAAA,sBAAA,CACxC,GAAI,CAAA,CAAA,GAAA,KAAO,IAAI,EAAE,CAAA,CACjB,MAAO,CAAA,CAAA,EAAA,KAAM,EAAE,CAAA;AAElB,EAAM,MAAA,gBAAA,GAAmB,MAAO,CAAA,sBAAA,CAC7B,GAAI,CAAA,CAAA,GAAA,KAAO,IAAI,EAAE,CAAA,CACjB,MAAO,CAAA,CAAA,EAAA,KAAM,EAAE,CAAA;AAElB,EAAA,OAAO,qBAAqB,MAAS,GAAA,CAAA,GACjC,qBAAqB,MAAO,CAAA,CAAC,KAAe,KAAU,KAAA;AACpD,IAAM,MAAA,eAAA,GAAkB,gBAAiB,CAAA,QAAA,CAAS,KAAK,CAAA;AACvD,IAAA,IAAI,iBAAwB,OAAA,GAAA;AAC5B,IAAA,OAAO,KAAQ,GAAA,CAAC,GAAG,GAAA,EAAK,KAAK,CAAI,GAAA,GAAA;AAAA,GAChC,EAAA,EAAE,CAAA,GACL,EAAC;AACP;AAEa,MAAA,oBAAA,GAAuB,CAAC,MAA2B,KAAA;AAC9D,EAAA,OACE,0BAA0B,MAAM,CAAA,CAAE,MAClC,GAAA,oCAAA,CAAqC,MAAM,CAAE,CAAA,MAAA;AAEjD;AAMa,MAAA,cAAA,GAAiB,CAAC,UAAgC,KAAA;AAC7D,EAAI,IAAA,CAAC,YAAmB,OAAA,CAAA;AACxB,EAAA,IAAI,WAAc,GAAA,CAAA;AAElB,EAAA,IAAI,WAAW,KAAO,EAAA;AACpB,IAAA,WAAA,IAAe,UAAW,CAAA,KAAA,CAAM,MAAO,CAAA,CAAC,KAAK,SAAc,KAAA;AACzD,MAAO,OAAA,GAAA,GAAM,eAAe,SAA2B,CAAA;AAAA,OACtD,CAAC,CAAA;AAAA;AAGN,EAAA,IAAI,WAAW,KAAO,EAAA;AACpB,IAAA,WAAA,IAAe,UAAW,CAAA,KAAA,CAAM,MAAO,CAAA,CAAC,KAAK,SAAc,KAAA;AACzD,MAAO,OAAA,GAAA,GAAM,eAAe,SAA2B,CAAA;AAAA,OACtD,CAAC,CAAA;AAAA;AAGN,EAAA,IAAI,WAAW,GAAK,EAAA;AAClB,IAAe,WAAA,IAAA,cAAA,CAAe,WAAW,GAAqB,CAAA;AAAA;AAGhE,EAAI,IAAA,UAAA,CAAW,aAAa,MAAO,CAAA,IAAA,CAAK,UAAU,CAAE,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACpE,IAAe,WAAA,IAAA,CAAA;AAAA;AAGjB,EAAO,OAAA,WAAA;AACT;;;;"}
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 '../alpha/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 +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 { 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
+ {"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 '../alpha/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 +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';\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":";;AA4BO,MAAM,iBAAoB,GAAA,OAC/B,cACA,EAAA,OAAA,EACA,GACA,cACG,KAAA;AACH,EAAI,IAAA,cAAA,CAAe,SAAS,CAAG,EAAA;AAC7B,IAAA,MAAM,cAAiB,GAAA,MAAM,OAAQ,CAAA,cAAA,CAAe,cAAc,CAAA;AAClE,IAAA,IAAK,eAAwC,KAAO,EAAA;AAClD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EAAG,kBAAkB,CAAE,CAAA,yCAAyC,CAAC,CAC9D,CAAA,EAAA,cAAA,CAAwC,MAAM,OACjD,CAAA;AAAA,OACF;AAAA;AACF;AAEJ;AAEO,MAAM,iBAAoB,GAAA,OAC/B,IACA,EAAA,iBAAA,EACA,SACA,CACG,KAAA;AACH,EAAI,IAAA,iBAAA,CAAkB,SAAS,CAAG,EAAA;AAChC,IAAM,MAAA,cAAA,GAAiB,MAAM,OAAQ,CAAA,cAAA;AAAA,MACnC,IAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAK,eAAwC,KAAO,EAAA;AAClD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,GAAG,CAAE,CAAA,yCAAyC,CAAC,CAC5C,CAAA,EAAA,cAAA,CAAwC,MAAM,OACjD,CAAA;AAAA,OACF;AAAA;AACF;AAEJ;AAEO,MAAM,gBAAmB,GAAA,OAC9B,gBACA,EAAA,OAAA,EACA,CACG,KAAA;AACH,EAAI,IAAA,gBAAA,CAAiB,SAAS,CAAG,EAAA;AAC/B,IAAA,MAAM,WAAW,gBAAiB,CAAA,GAAA;AAAA,MAAI,CAAA,GAAA,KACpC,OAAQ,CAAA,yBAAA,CAA0B,GAAG;AAAA,KACvC;AAEA,IAAA,MAAM,MAAmC,GAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,QAAQ,CAAA;AACnE,IAAM,MAAA,KAAA,GAAQ,MACX,CAAA,GAAA,CAAI,CAAM,CAAA,KAAA,CAAA,CAA2B,OAAO,OAAO,CAAA,CACnD,MAAO,CAAA,CAAA,CAAA,KAAK,CAAC,CAAA;AAEhB,IAAI,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EAAG,EAAE,iCAAiC,CAAC,IAAI,KAAM,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OAC7D;AAAA;AACF;AAEJ;AAEO,MAAM,gBAAmB,GAAA,OAC9B,gBACA,EAAA,OAAA,EACA,CACG,KAAA;AACH,EAAI,IAAA,gBAAA,CAAiB,SAAS,CAAG,EAAA;AAC/B,IAAA,MAAM,WAAW,gBAAiB,CAAA,GAAA;AAAA,MAAI,CAAC,EAAE,EAAI,EAAA,eAAA,OAC3C,OAAQ,CAAA,yBAAA,CAA0B,IAAI,eAAe;AAAA,KACvD;AAEA,IAAA,MAAM,MAAmC,GAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,QAAQ,CAAA;AACnE,IAAM,MAAA,KAAA,GAAQ,MACX,CAAA,GAAA,CAAI,CAAM,CAAA,KAAA,CAAA,CAA2B,OAAO,OAAO,CAAA,CACnD,MAAO,CAAA,CAAA,CAAA,KAAK,CAAC,CAAA;AAEhB,IAAI,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EAAG,EAAE,iCAAiC,CAAC,IAAI,KAAM,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OAC7D;AAAA;AACF;AAEJ;AAEO,MAAM,gBAAmB,GAAA,OAC9B,aACA,EAAA,OAAA,EACA,GACA,cACG,KAAA;AACH,EAAI,IAAA,aAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,IAAA,MAAM,WAAW,aAAc,CAAA,GAAA;AAAA,MAAI,CAAA,GAAA,KACjC,OAAQ,CAAA,2BAAA,CAA4B,GAAG;AAAA,KACzC;AAEA,IAAA,MAAM,MAAmC,GAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,QAAQ,CAAA;AACnE,IAAM,MAAA,KAAA,GAAQ,MACX,CAAA,GAAA,CAAI,CAAM,CAAA,KAAA,CAAA,CAA2B,OAAO,OAAO,CAAA,CACnD,MAAO,CAAA,CAAA,CAAA,KAAK,CAAC,CAAA;AAEhB,IAAI,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EACE,kBAAkB,CAAE,CAAA,8BAA8B,CACpD,CAAI,CAAA,EAAA,KAAA,CAAM,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA,OACtB;AAAA;AACF;AAEJ;AAEO,MAAM,aAAa,CACxB,QAAA,EACA,GACA,QACA,EAAA,KAAA,EACA,QACA,IACG,KAAA;AACH,EAAA,MAAM,kBAAkB,KAAS,IAAA,QAAA;AACjC,EAAM,MAAA,SAAA,GACJ,mBAAmB,MACf,GAAA;AAAA,IACE,KAAO,EAAA;AAAA,MACL,YAAA,EAAc,EAAE,+BAAwC,EAAA;AAAA,QACtD,QAAU,EAAA,eAAA;AAAA,QACV;AAAA,OACD;AAAA;AACH,GAEF,GAAA,SAAA;AACN,EAAA,IAAI,QAAQ,eAAiB,EAAA;AAC3B,IAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,IAAK,EAAA,GAAI,eAAe,eAAe,CAAA;AAChE,IAAA,QAAA,CAAS,YAAY,IAAI,CAAA,CAAA,EAAI,SAAS,CAAI,CAAA,EAAA,IAAI,IAAI,SAAS,CAAA;AAAA,GACtD,MAAA;AACL,IAAA,QAAA,CAAS,MAAM,SAAS,CAAA;AAAA;AAE5B;;;;"}
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 '../alpha/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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-rbac",
3
- "version": "1.48.0",
3
+ "version": "1.49.0",
4
4
  "main": "./dist/index.esm.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -15,7 +15,10 @@
15
15
  "@backstage-community/plugin-rbac-backend",
16
16
  "@backstage-community/plugin-rbac-common",
17
17
  "@backstage-community/plugin-rbac-node"
18
- ]
18
+ ],
19
+ "features": {
20
+ "./alpha": "@backstage/FrontendPlugin"
21
+ }
19
22
  },
20
23
  "sideEffects": false,
21
24
  "exports": {
@@ -25,6 +28,7 @@
25
28
  "default": "./dist/index.esm.js"
26
29
  },
27
30
  "./alpha": {
31
+ "backstage": "@backstage/FrontendPlugin",
28
32
  "import": "./dist/alpha.esm.js",
29
33
  "types": "./dist/alpha.d.ts",
30
34
  "default": "./dist/alpha.esm.js"
@@ -49,17 +53,21 @@
49
53
  "postpack": "backstage-cli package postpack",
50
54
  "prepack": "backstage-cli package prepack",
51
55
  "start": "backstage-cli package start",
56
+ "start:legacy": "backstage-cli package start --entrypoint dev/legacy.tsx",
52
57
  "test": "backstage-cli package test --passWithNoTests --coverage",
53
58
  "tsc": "tsc",
54
59
  "prettier:check": "prettier --ignore-unknown --check .",
55
60
  "prettier:fix": "prettier --ignore-unknown --write .",
56
- "ui-test": "start-server-and-test start localhost:3000 'playwright test'"
61
+ "ui-test": "start-server-and-test start localhost:3000 'playwright test'",
62
+ "ui-test:legacy": "start-server-and-test start:legacy localhost:3000 'playwright test'"
57
63
  },
58
64
  "dependencies": {
59
65
  "@backstage-community/plugin-rbac-common": "^1.23.0",
60
66
  "@backstage/catalog-model": "^1.7.6",
61
67
  "@backstage/core-components": "^0.18.6",
62
68
  "@backstage/core-plugin-api": "^1.12.2",
69
+ "@backstage/frontend-plugin-api": "^0.13.3",
70
+ "@backstage/plugin-app-react": "^0.1.0",
63
71
  "@backstage/plugin-catalog": "^1.32.2",
64
72
  "@backstage/plugin-catalog-common": "^1.1.7",
65
73
  "@backstage/plugin-permission-common": "^0.9.5",
@@ -86,6 +94,7 @@
86
94
  "@backstage/cli": "^0.35.3",
87
95
  "@backstage/core-app-api": "^1.19.4",
88
96
  "@backstage/dev-utils": "^1.1.19",
97
+ "@backstage/frontend-defaults": "^0.3.5",
89
98
  "@backstage/test-utils": "^1.7.14",
90
99
  "@backstage/ui": "^0.11.2",
91
100
  "@playwright/test": "^1.56.1",
@@ -95,7 +104,7 @@
95
104
  "@testing-library/react-hooks": "8.0.1",
96
105
  "@testing-library/user-event": "14.6.1",
97
106
  "@types/autosuggest-highlight": "3.2.3",
98
- "@types/node": "22.19.7",
107
+ "@types/node": "22.19.11",
99
108
  "@types/react": "^18.2.58",
100
109
  "msw": "1.3.5",
101
110
  "react": "^16.13.1 || ^17.0.0 || ^18.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"de.esm.js","sources":["../../src/translations/de.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 { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from './ref';\n\nconst rbacTranslationDe = createTranslationMessages({\n ref: rbacTranslationRef,\n full: true,\n messages: {\n 'page.title': 'RBAC',\n 'page.createRole': 'Rolle erstellen',\n 'page.editRole': 'Rolle bearbeiten',\n 'table.title': 'Alle Rollen',\n 'table.titleWithCount': 'Alle Rollen ({{count}})',\n 'table.headers.name': 'Name',\n 'table.headers.usersAndGroups': 'Benutzer und Gruppen',\n 'table.headers.accessiblePlugins': 'Zugängliche Plugins',\n 'table.headers.actions': 'Aktionen',\n 'table.emptyContent': 'Keine Datensätze gefunden',\n 'table.searchPlaceholder': 'Filtern',\n 'table.labelRowsSelect': 'Zeilen',\n 'toolbar.createButton': 'Erstellen',\n 'toolbar.warning.title': 'Rolle kann nicht erstellt werden.',\n 'toolbar.warning.message':\n 'Um die Schaltfläche Rolle erstellen/bearbeiten zu aktivieren, stellen Sie sicher, dass die erforderlichen Benutzer/Gruppen im Katalog verfügbar sind, da eine Rolle nicht ohne Benutzer/Gruppen erstellt werden kann, und dass die Rolle, die mit Ihrem Benutzer verknüpft ist, die Berechtigungsrichtlinien <link>hier</link> erwähnt.',\n 'toolbar.warning.linkText': 'hier',\n 'toolbar.warning.note': 'Hinweis',\n 'toolbar.warning.noteText':\n 'Selbst nach dem Importieren von Benutzern/Gruppen in den Katalog und dem Anwenden der oben genannten Berechtigungen, wenn die Erstellen/Bearbeiten-Schaltfläche weiterhin deaktiviert ist, wenden Sie sich bitte an Ihren Administrator, da Sie möglicherweise bedingt vom Zugriff auf die Erstellen/Bearbeiten-Schaltfläche eingeschränkt sind.',\n 'errors.notFound': 'Nicht gefunden',\n 'errors.unauthorized': 'Nicht berechtigt, Rolle zu erstellen',\n 'errors.rbacDisabled':\n 'Aktivieren Sie das RBAC-Backend-Plugin, um diese Funktion zu verwenden.',\n 'errors.rbacDisabledInfo':\n 'Um RBAC zu aktivieren, setzen Sie `permission.enabled` auf `true` in der App-Konfigurationsdatei.',\n 'errors.fetchRoles': 'Beim Abrufen der Rollen ist etwas schief gelaufen',\n 'errors.fetchRole': 'Beim Abrufen der Rolle ist etwas schief gelaufen',\n 'errors.fetchPolicies':\n 'Beim Abrufen der Berechtigungsrichtlinien ist etwas schief gelaufen',\n 'errors.fetchPoliciesErr': 'Fehler beim Abrufen der Richtlinien. {{error}}',\n 'errors.fetchPlugins': 'Fehler beim Abrufen der Plugins. {{error}}',\n 'errors.fetchConditionalPermissionPolicies':\n 'Fehler beim Abrufen der bedingten Berechtigungsrichtlinien. {{error}}',\n 'errors.fetchConditions':\n 'Beim Abrufen der Rollenbedingungen ist etwas schief gelaufen',\n 'errors.fetchUsersAndGroups':\n 'Beim Abrufen der Benutzer und Gruppen ist etwas schief gelaufen',\n 'errors.createRole': 'Rolle kann nicht erstellt werden.',\n 'errors.editRole': 'Rolle kann nicht bearbeitet werden.',\n 'errors.deleteRole': 'Rolle kann nicht gelöscht werden.',\n 'errors.roleCreatedSuccess':\n 'Rolle wurde erfolgreich erstellt, aber Berechtigungsrichtlinien konnten nicht zur Rolle hinzugefügt werden.',\n 'errors.roleCreatedConditionsSuccess':\n 'Rolle wurde erfolgreich erstellt, aber Bedingungen konnten nicht zur Rolle hinzugefügt werden.',\n 'roleForm.titles.createRole': 'Rolle erstellen',\n 'roleForm.titles.editRole': 'Rolle bearbeiten',\n 'roleForm.titles.nameAndDescription':\n 'Name und Beschreibung der Rolle eingeben',\n 'roleForm.titles.usersAndGroups': 'Benutzer und Gruppen hinzufügen',\n 'roleForm.titles.permissionPolicies': 'Berechtigungsrichtlinien hinzufügen',\n 'roleForm.review.reviewAndCreate': 'Überprüfen und erstellen',\n 'roleForm.review.reviewAndSave': 'Überprüfen und speichern',\n 'roleForm.review.nameDescriptionOwner':\n 'Name, Beschreibung und Eigentümer der Rolle',\n 'roleForm.review.permissionPoliciesWithCount':\n 'Berechtigungsrichtlinien ({{count}})',\n 'roleForm.steps.next': 'Weiter',\n 'roleForm.steps.back': 'Zurück',\n 'roleForm.steps.cancel': 'Abbrechen',\n 'roleForm.steps.reset': 'Zurücksetzen',\n 'roleForm.steps.create': 'Erstellen',\n 'roleForm.steps.save': 'Speichern',\n 'roleForm.fields.name.label': 'Name',\n 'roleForm.fields.name.helperText': 'Name der Rolle eingeben',\n 'roleForm.fields.description.label': 'Beschreibung',\n 'roleForm.fields.description.helperText':\n 'Geben Sie eine kurze Beschreibung der Rolle ein (Der Zweck der Rolle)',\n 'roleForm.fields.owner.label': 'Eigentümer',\n 'roleForm.fields.owner.helperText':\n 'Optional: Geben Sie einen Benutzer oder eine Gruppe ein, die die Berechtigung haben soll, diese Rolle zu bearbeiten und zusätzliche Rollen zu erstellen. Im nächsten Schritt geben Sie an, welche Benutzer sie ihren Rollen zuweisen können und auf welche Plugins sie Zugriff gewähren können. Wenn leer gelassen, wird automatisch der Autor bei der Erstellung zugewiesen.',\n 'deleteDialog.title': 'Rolle löschen',\n 'deleteDialog.question': 'Diese Rolle löschen?',\n 'deleteDialog.confirmation':\n 'Bist du sicher, dass du die Rolle **{{roleName}}** löschen möchtest?\\n\\nDas Löschen dieser Rolle ist irreversibel und entfernt ihre Funktionalität aus dem System. Bitte vorsichtig vorgehen.\\n\\nDie **{{members}}**, die mit dieser Rolle verbunden sind, verlieren den Zugriff auf alle in dieser Rolle angegebenen **{{permissions}} Berechtigungsrichtlinien**.',\n 'deleteDialog.roleNameLabel': 'Rollenname',\n 'deleteDialog.roleNameHelper':\n 'Geben Sie den Namen der Rolle zur Bestätigung ein',\n 'deleteDialog.deleteButton': 'Löschen',\n 'deleteDialog.cancelButton': 'Abbrechen',\n 'deleteDialog.successMessage': 'Rolle {{roleName}} erfolgreich gelöscht',\n 'snackbar.success': 'Erfolg',\n 'common.noResults': 'Keine Ergebnisse für diesen Zeitraum.',\n 'common.exportCSV': 'CSV exportieren',\n 'common.csvFilename': 'daten-export.csv',\n 'common.noMembers': 'Keine Mitglieder',\n 'common.groups': 'Gruppen',\n 'common.group': 'Gruppe',\n 'common.users': 'Benutzer',\n 'common.user': 'Benutzer',\n 'common.use': 'Verwenden',\n 'common.refresh': 'Aktualisieren',\n 'common.edit': 'Bearbeiten',\n 'common.unauthorizedToEdit': 'Nicht berechtigt zu bearbeiten',\n 'common.noRecordsFound': 'Keine Datensätze gefunden',\n 'common.selectUsersAndGroups': 'Benutzer und Gruppen auswählen',\n 'common.clearSearch': 'Suche löschen',\n 'common.closeDrawer': 'Schublade schließen',\n 'common.remove': 'Entfernen',\n 'common.addRule': 'Regel hinzufügen',\n 'common.selectRule': 'Eine Regel auswählen',\n 'common.rule': 'Regel',\n 'common.removeNestedCondition': 'Verschachtelte Bedingung entfernen',\n 'common.overview': 'Übersicht',\n 'common.about': 'Über',\n 'common.description': 'Beschreibung',\n 'common.modifiedBy': 'Geändert von',\n 'common.lastModified': 'Zuletzt geändert',\n 'common.owner': 'Eigentümer',\n 'common.noUsersAndGroupsSelected': 'Keine Benutzer und Gruppen ausgewählt',\n 'common.selectedUsersAndGroupsAppearHere':\n 'Ausgewählte Benutzer und Gruppen werden hier angezeigt.',\n 'common.name': 'Name',\n 'common.type': 'Typ',\n 'common.members': 'Mitglieder',\n 'common.actions': 'Aktionen',\n 'common.removeMember': 'Mitglied entfernen',\n 'common.delete': 'Löschen',\n 'common.deleteRole': 'Rolle löschen',\n 'common.update': 'Aktualisieren',\n 'common.editRole': 'Rolle bearbeiten',\n 'common.checkingPermissions': 'Berechtigungen werden überprüft…',\n 'common.unauthorizedTo': 'Nicht autorisiert für {{action}}',\n 'common.performThisAction': 'diese Aktion ausführen',\n 'common.unableToCreatePermissionPolicies':\n 'Berechtigungsrichtlinien können nicht erstellt werden.',\n 'common.unableToDeletePermissionPolicies':\n 'Berechtigungsrichtlinien können nicht gelöscht werden.',\n 'common.unableToRemoveConditions':\n 'Bedingungen können nicht von der Rolle entfernt werden.',\n 'common.unableToUpdateConditions':\n 'Bedingungen können nicht aktualisiert werden.',\n 'common.unableToAddConditions':\n 'Bedingungen können nicht zur Rolle hinzugefügt werden.',\n 'common.roleActionSuccessfully':\n 'Rolle {{roleName}} {{action}} erfolgreich',\n 'common.unableToFetchRole': 'Rolle kann nicht abgerufen werden: {{error}}',\n 'common.unableToFetchMembers':\n 'Mitglieder können nicht abgerufen werden: {{error}}',\n 'common.roleAction': '{{action}} Rolle',\n 'common.membersCount': '{{count}} Mitglieder',\n 'common.parentGroupCount': '{{count}} übergeordnete Gruppe',\n 'common.childGroupsCount': '{{count}} untergeordnete Gruppen',\n 'common.searchAndSelectUsersGroups':\n 'Suchen und wählen Sie Benutzer und Gruppen aus, die hinzugefügt werden sollen. Ausgewählte Benutzer und Gruppen werden in der Tabelle unten angezeigt.',\n 'common.noUsersAndGroupsFound': 'Keine Benutzer und Gruppen gefunden.',\n 'common.errorFetchingUserGroups':\n 'Fehler beim Abrufen von Benutzern und Gruppen: {{error}}',\n 'common.nameRequired': 'Name ist erforderlich',\n 'common.noMemberSelected': 'Kein Mitglied ausgewählt',\n 'common.noPluginSelected': 'Kein Plugin ausgewählt',\n 'common.pluginRequired': 'Plugin ist erforderlich',\n 'common.permissionRequired': 'Berechtigung ist erforderlich',\n 'common.editCell': 'Bearbeiten...',\n 'common.selectCell': 'Auswählen...',\n 'common.expandRow': 'Zeile erweitern',\n 'common.configureAccessFor': 'Zugriff konfigurieren für',\n 'common.defaultResourceTypeVisible':\n 'Standardmäßig ist der ausgewählte Ressourcentyp für alle hinzugefügten Benutzer sichtbar. Wenn Sie den Zugriff einschränken oder Berechtigungen für bestimmte Plugin-Regeln gewähren möchten, wählen Sie diese aus und fügen Sie die Parameter hinzu.',\n 'conditionalAccess.condition': 'Bedingung',\n 'conditionalAccess.allOf': 'AllOf',\n 'conditionalAccess.anyOf': 'AnyOf',\n 'conditionalAccess.not': 'Not',\n 'conditionalAccess.addNestedCondition':\n 'Verschachtelte Bedingung hinzufügen',\n 'conditionalAccess.addRule': 'Regel hinzufügen',\n 'conditionalAccess.nestedConditionTooltip':\n 'Verschachtelte Bedingungen sind **1-Layer-Regeln innerhalb einer Hauptbedingung**. Sie ermöglichen es Ihnen, angemessenen Zugriff zu gewähren, indem Sie detaillierte Berechtigungen basierend auf verschiedenen Bedingungen verwenden. Sie können mehrere verschachtelte Bedingungen hinzufügen.',\n 'conditionalAccess.nestedConditionExample':\n 'Sie können beispielsweise Zugriff auf alle Entitätstypen in der Hauptbedingung gewähren und eine verschachtelte Bedingung verwenden, um den Zugriff auf Entitäten zu beschränken, die dem Benutzer gehören.',\n 'dialog.cancelRoleCreation': 'Rollenerstellung abbrechen',\n 'dialog.exitRoleCreation': 'Rollenerstellung beenden?',\n 'dialog.exitRoleEditing': 'Rollenbearbeitung beenden?',\n 'dialog.exitWarning':\n '\\n\\nDas Verlassen dieser Seite verwirft dauerhaft die von Ihnen eingegebenen Informationen.\\n\\nMöchten Sie wirklich beenden?',\n 'dialog.discard': 'Verwerfen',\n 'dialog.cancel': 'Abbrechen',\n 'permissionPolicies.helperText':\n 'Standardmäßig erhalten Benutzer keinen Zugriff auf Plugins. Um Benutzerzugriff zu gewähren, wählen Sie die Plugins aus, die Sie aktivieren möchten. Wählen Sie dann aus, welche Aktionen Sie dem Benutzer erlauben möchten.',\n 'permissionPolicies.allPlugins': 'Alle Plugins ({{count}})',\n 'permissionPolicies.errorFetchingPolicies':\n 'Fehler beim Abrufen der Berechtigungsrichtlinien: {{error}}',\n 'permissionPolicies.resourceTypeTooltip': 'Ressourcentyp: {{resourceType}}',\n 'permissionPolicies.advancedPermissionsTooltip':\n 'Verwenden Sie erweiterte angepasste Berechtigungen, um Zugriff auf bestimmte Teile des ausgewählten Ressourcentyps zu gewähren.',\n 'permissionPolicies.noAdvancedPermissionsTooltip':\n 'Erweiterte Anpassung wird für diesen Ressourcentyp nicht unterstützt.',\n 'permissionPolicies.pluginsSelected': '{{count}} Plugins',\n 'permissionPolicies.noPluginsSelected': 'Keine Plugins ausgewählt',\n 'permissionPolicies.search': 'Suchen',\n 'permissionPolicies.noRecordsToDisplay': 'Keine Datensätze anzuzeigen.',\n 'permissionPolicies.selectedPluginsAppearHere':\n 'Ausgewählte Plugins erscheinen hier.',\n 'permissionPolicies.selectPlugins': 'Plugins auswählen',\n 'permissionPolicies.noPluginsFound': 'Keine Plugins gefunden.',\n 'permissionPolicies.plugin': 'Plugin',\n 'permissionPolicies.permission': 'Berechtigung',\n 'permissionPolicies.policies': 'Richtlinien',\n 'permissionPolicies.conditional': 'Bedingt',\n 'permissionPolicies.rules': 'Regeln',\n 'permissionPolicies.rule': 'Regel',\n 'permissionPolicies.permissionPolicies': 'Berechtigungsrichtlinien',\n 'permissionPolicies.permissions': 'Berechtigungen',\n },\n});\n\nexport default rbacTranslationDe;\n"],"names":[],"mappings":"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"}
@@ -1,178 +0,0 @@
1
- import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
2
- import { rbacTranslationRef } from './ref.esm.js';
3
-
4
- const rbacTranslationEs = createTranslationMessages({
5
- ref: rbacTranslationRef,
6
- full: true,
7
- messages: {
8
- "page.title": "RBAC",
9
- "page.createRole": "Crear rol",
10
- "page.editRole": "Editar rol",
11
- "table.searchPlaceholder": "Filtrar",
12
- "table.title": "Todos los roles",
13
- "table.titleWithCount": "Todos los roles ({{count}})",
14
- "table.headers.name": "Nombre",
15
- "table.headers.usersAndGroups": "Usuarios y grupos",
16
- "table.headers.accessiblePlugins": "Plugins accesibles",
17
- "table.headers.actions": "Acciones",
18
- "table.emptyContent": "No se encontraron registros",
19
- "table.labelRowsSelect": "Filas",
20
- "toolbar.createButton": "Crear",
21
- "toolbar.warning.title": "No se puede crear el rol.",
22
- "toolbar.warning.message": "Para habilitar el bot\xF3n crear/editar rol, aseg\xFArate de que los usuarios/grupos requeridos est\xE9n disponibles en el cat\xE1logo, ya que no se puede crear un rol sin usuarios/grupos y tambi\xE9n el rol asociado con tu usuario debe tener las pol\xEDticas de permisos mencionadas <link>aqu\xED</link>.",
23
- "toolbar.warning.linkText": "aqu\xED",
24
- "toolbar.warning.note": "Nota",
25
- "toolbar.warning.noteText": "Incluso despu\xE9s de ingerir usuarios/grupos en el cat\xE1logo y aplicar los permisos mencionados anteriormente, si el bot\xF3n crear/editar sigue deshabilitado, por favor contacta a tu administrador ya que podr\xEDas estar condicionalmente restringido de acceder al bot\xF3n crear/editar.",
26
- "errors.notFound": "No encontrado",
27
- "errors.unauthorized": "No autorizado para crear un rol",
28
- "errors.rbacDisabled": "Habilita el plugin backend RBAC para usar esta funcionalidad.",
29
- "errors.rbacDisabledInfo": "Para habilitar RBAC, establece `permission.enabled` en `true` en el archivo de configuraci\xF3n de la aplicaci\xF3n.",
30
- "errors.fetchRoles": "Algo sali\xF3 mal al obtener los roles",
31
- "errors.fetchRole": "Algo sali\xF3 mal al obtener el rol",
32
- "errors.fetchPolicies": "Algo sali\xF3 mal al obtener las pol\xEDticas de permisos",
33
- "errors.fetchPoliciesErr": "Error al obtener las pol\xEDticas. {{error}}",
34
- "errors.fetchPlugins": "Error al obtener los plugins. {{error}}",
35
- "errors.fetchConditionalPermissionPolicies": "Error al obtener las pol\xEDticas de permisos condicionales. {{error}}",
36
- "errors.fetchConditions": "Algo sali\xF3 mal al obtener las condiciones del rol",
37
- "errors.fetchUsersAndGroups": "Algo sali\xF3 mal al obtener usuarios y grupos",
38
- "errors.createRole": "No se puede crear el rol.",
39
- "errors.editRole": "No se puede editar el rol.",
40
- "errors.deleteRole": "No se puede eliminar el rol.",
41
- "errors.roleCreatedSuccess": "El rol fue creado exitosamente pero no se pudieron agregar las pol\xEDticas de permisos al rol.",
42
- "errors.roleCreatedConditionsSuccess": "El rol fue creado exitosamente pero no se pudieron agregar condiciones al rol.",
43
- "roleForm.titles.createRole": "Crear rol",
44
- "roleForm.titles.editRole": "Editar rol",
45
- "roleForm.titles.nameAndDescription": "Ingresa nombre y descripci\xF3n del rol",
46
- "roleForm.titles.usersAndGroups": "Agregar usuarios y grupos",
47
- "roleForm.titles.permissionPolicies": "Agregar pol\xEDticas de permisos",
48
- "roleForm.review.reviewAndCreate": "Revisar y crear",
49
- "roleForm.review.reviewAndSave": "Revisar y guardar",
50
- "roleForm.review.nameDescriptionOwner": "Nombre, descripci\xF3n y propietario del rol",
51
- "roleForm.review.permissionPoliciesWithCount": "Pol\xEDticas de permisos ({{count}})",
52
- "roleForm.steps.next": "Siguiente",
53
- "roleForm.steps.back": "Atr\xE1s",
54
- "roleForm.steps.cancel": "Cancelar",
55
- "roleForm.steps.reset": "Reiniciar",
56
- "roleForm.steps.create": "Crear",
57
- "roleForm.steps.save": "Guardar",
58
- "roleForm.fields.name.label": "Nombre",
59
- "roleForm.fields.name.helperText": "Ingresa el nombre del rol",
60
- "roleForm.fields.description.label": "Descripci\xF3n",
61
- "roleForm.fields.description.helperText": "Ingresa una breve descripci\xF3n del rol (El prop\xF3sito del rol)",
62
- "roleForm.fields.owner.label": "Propietario",
63
- "roleForm.fields.owner.helperText": "Opcional: Ingresa un usuario o grupo que tendr\xE1 permiso para editar este rol y crear roles adicionales. En el siguiente paso, especifica qu\xE9 usuarios pueden asignar a sus roles y a qu\xE9 plugins pueden otorgar acceso. Si se deja en blanco, asigna autom\xE1ticamente el autor en la creaci\xF3n.",
64
- "deleteDialog.title": "Eliminar rol",
65
- "deleteDialog.question": "\xBFEliminar este rol?",
66
- "deleteDialog.confirmation": "\xBFEst\xE1s seguro de que quieres eliminar el rol **{{roleName}}**?\n\nEliminar este rol es irreversible y eliminar\xE1 su funcionalidad del sistema. Procede con precauci\xF3n.\n\nLos **{{members}}** asociados con este rol perder\xE1n el acceso a todas las **{{permissions}} pol\xEDticas de permisos** especificadas en este rol.",
67
- "deleteDialog.roleNameLabel": "Nombre del rol",
68
- "deleteDialog.roleNameHelper": "Escribe el nombre del rol para confirmar",
69
- "deleteDialog.deleteButton": "Eliminar",
70
- "deleteDialog.cancelButton": "Cancelar",
71
- "deleteDialog.successMessage": "Rol {{roleName}} eliminado exitosamente",
72
- "snackbar.success": "\xC9xito",
73
- "common.noResults": "No hay resultados para este rango de fechas.",
74
- "common.exportCSV": "Exportar CSV",
75
- "common.csvFilename": "exportacion-datos.csv",
76
- "common.noMembers": "Sin miembros",
77
- "common.groups": "grupos",
78
- "common.group": "grupo",
79
- "common.users": "usuarios",
80
- "common.user": "usuario",
81
- "common.use": "Usar",
82
- "common.refresh": "Actualizar",
83
- "common.edit": "Editar",
84
- "common.unauthorizedToEdit": "No autorizado para editar",
85
- "common.noRecordsFound": "No se encontraron registros",
86
- "common.selectUsersAndGroups": "Seleccionar usuarios y grupos",
87
- "common.clearSearch": "limpiar b\xFAsqueda",
88
- "common.closeDrawer": "Cerrar el caj\xF3n",
89
- "common.remove": "Eliminar",
90
- "common.addRule": "Agregar regla",
91
- "common.selectRule": "Seleccionar una regla",
92
- "common.rule": "Regla",
93
- "common.removeNestedCondition": "Eliminar condici\xF3n anidada",
94
- "common.overview": "Resumen",
95
- "common.about": "Acerca de",
96
- "common.description": "Descripci\xF3n",
97
- "common.modifiedBy": "Modificado por",
98
- "common.lastModified": "\xDAltima modificaci\xF3n",
99
- "common.owner": "Propietario",
100
- "common.noUsersAndGroupsSelected": "No se seleccionaron usuarios y grupos",
101
- "common.selectedUsersAndGroupsAppearHere": "Los usuarios y grupos seleccionados aparecen aqu\xED.",
102
- "common.name": "Nombre",
103
- "common.type": "Tipo",
104
- "common.members": "Miembros",
105
- "common.actions": "Acciones",
106
- "common.removeMember": "Eliminar miembro",
107
- "common.delete": "Eliminar",
108
- "common.deleteRole": "Eliminar rol",
109
- "common.update": "Actualizar",
110
- "common.editRole": "Editar rol",
111
- "common.checkingPermissions": "Verificando permisos\u2026",
112
- "common.unauthorizedTo": "No autorizado para {{action}}",
113
- "common.performThisAction": "realizar esta acci\xF3n",
114
- "common.unableToCreatePermissionPolicies": "No se pueden crear las pol\xEDticas de permisos.",
115
- "common.unableToDeletePermissionPolicies": "No se pueden eliminar las pol\xEDticas de permisos.",
116
- "common.unableToRemoveConditions": "No se pueden eliminar las condiciones del rol.",
117
- "common.unableToUpdateConditions": "No se pueden actualizar las condiciones.",
118
- "common.unableToAddConditions": "No se pueden agregar condiciones al rol.",
119
- "common.roleActionSuccessfully": "Rol {{roleName}} {{action}} exitosamente",
120
- "common.unableToFetchRole": "No se puede obtener el rol: {{error}}",
121
- "common.unableToFetchMembers": "No se pueden obtener los miembros: {{error}}",
122
- "common.roleAction": "{{action}} rol",
123
- "common.membersCount": "{{count}} miembros",
124
- "common.parentGroupCount": "{{count}} grupo padre",
125
- "common.childGroupsCount": "{{count}} grupos hijos",
126
- "common.searchAndSelectUsersGroups": "Busque y seleccione usuarios y grupos para agregar. Los usuarios y grupos seleccionados aparecer\xE1n en la tabla a continuaci\xF3n.",
127
- "common.noUsersAndGroupsFound": "No se encontraron usuarios y grupos.",
128
- "common.errorFetchingUserGroups": "Error al obtener usuarios y grupos: {{error}}",
129
- "common.nameRequired": "El nombre es requerido",
130
- "common.noMemberSelected": "Ning\xFAn miembro seleccionado",
131
- "common.noPluginSelected": "Ning\xFAn plugin seleccionado",
132
- "common.pluginRequired": "El plugin es requerido",
133
- "common.permissionRequired": "El permiso es requerido",
134
- "common.editCell": "Editar...",
135
- "common.selectCell": "Seleccionar...",
136
- "common.expandRow": "expandir fila",
137
- "common.configureAccessFor": "Configurar acceso para",
138
- "common.defaultResourceTypeVisible": "Por defecto, el tipo de recurso seleccionado es visible para todos los usuarios agregados. Si quieres restringir o otorgar permisos a reglas de plugin espec\xEDficas, selecci\xF3nalas y agrega los par\xE1metros.",
139
- "conditionalAccess.condition": "Condici\xF3n",
140
- "conditionalAccess.allOf": "AllOf",
141
- "conditionalAccess.anyOf": "AnyOf",
142
- "conditionalAccess.not": "Not",
143
- "conditionalAccess.addNestedCondition": "Agregar condici\xF3n anidada",
144
- "conditionalAccess.addRule": "Agregar regla",
145
- "conditionalAccess.nestedConditionTooltip": "Las condiciones anidadas son **reglas de 1 nivel dentro de una condici\xF3n principal**. Te permiten permitir un acceso apropiado utilizando permisos detallados basados en varias condiciones. Puedes agregar m\xFAltiples condiciones anidadas.",
146
- "conditionalAccess.nestedConditionExample": "Por ejemplo, puedes permitir el acceso a todos los tipos de entidades en la condici\xF3n principal y usar una condici\xF3n anidada para limitar el acceso a las entidades propiedad del usuario.",
147
- "dialog.cancelRoleCreation": "Cancelar creaci\xF3n de rol",
148
- "dialog.exitRoleCreation": "\xBFSalir de la creaci\xF3n de rol?",
149
- "dialog.exitRoleEditing": "\xBFSalir de la edici\xF3n de rol?",
150
- "dialog.exitWarning": "\n\nSalir de esta p\xE1gina descartar\xE1 permanentemente la informaci\xF3n que ingresaste.\n\n\xBFEst\xE1s seguro de que quieres salir?",
151
- "dialog.discard": "Descartar",
152
- "dialog.cancel": "Cancelar",
153
- "permissionPolicies.helperText": "Por defecto, a los usuarios no se les otorga acceso a ning\xFAn plugin. Para otorgar acceso a los usuarios, selecciona los plugins que quieres habilitar. Luego, selecciona qu\xE9 acciones te gustar\xEDa dar permiso al usuario.",
154
- "permissionPolicies.allPlugins": "Todos los plugins ({{count}})",
155
- "permissionPolicies.errorFetchingPolicies": "Error al obtener las pol\xEDticas de permisos: {{error}}",
156
- "permissionPolicies.resourceTypeTooltip": "tipo de recurso: {{resourceType}}",
157
- "permissionPolicies.advancedPermissionsTooltip": "Usa permisos personalizados avanzados para permitir el acceso a partes espec\xEDficas del tipo de recurso seleccionado.",
158
- "permissionPolicies.noAdvancedPermissionsTooltip": "La personalizaci\xF3n avanzada no es compatible con este tipo de recurso.",
159
- "permissionPolicies.pluginsSelected": "{{count}} plugins",
160
- "permissionPolicies.noPluginsSelected": "Ning\xFAn plugin seleccionado",
161
- "permissionPolicies.search": "Buscar",
162
- "permissionPolicies.noRecordsToDisplay": "No hay registros para mostrar.",
163
- "permissionPolicies.selectedPluginsAppearHere": "Los plugins seleccionados aparecen aqu\xED.",
164
- "permissionPolicies.selectPlugins": "Seleccionar plugins",
165
- "permissionPolicies.noPluginsFound": "No se encontraron plugins.",
166
- "permissionPolicies.plugin": "Plugin",
167
- "permissionPolicies.permission": "Permiso",
168
- "permissionPolicies.policies": "Pol\xEDticas",
169
- "permissionPolicies.conditional": "Condicional",
170
- "permissionPolicies.rules": "reglas",
171
- "permissionPolicies.rule": "regla",
172
- "permissionPolicies.permissionPolicies": "Pol\xEDticas de permisos",
173
- "permissionPolicies.permissions": "permisos"
174
- }
175
- });
176
-
177
- export { rbacTranslationEs as default };
178
- //# sourceMappingURL=es.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"es.esm.js","sources":["../../src/translations/es.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 { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from './ref';\n\nconst rbacTranslationEs = createTranslationMessages({\n ref: rbacTranslationRef,\n full: true,\n messages: {\n 'page.title': 'RBAC',\n 'page.createRole': 'Crear rol',\n 'page.editRole': 'Editar rol',\n 'table.searchPlaceholder': 'Filtrar',\n 'table.title': 'Todos los roles',\n 'table.titleWithCount': 'Todos los roles ({{count}})',\n 'table.headers.name': 'Nombre',\n 'table.headers.usersAndGroups': 'Usuarios y grupos',\n 'table.headers.accessiblePlugins': 'Plugins accesibles',\n 'table.headers.actions': 'Acciones',\n 'table.emptyContent': 'No se encontraron registros',\n 'table.labelRowsSelect': 'Filas',\n 'toolbar.createButton': 'Crear',\n 'toolbar.warning.title': 'No se puede crear el rol.',\n 'toolbar.warning.message':\n 'Para habilitar el botón crear/editar rol, asegúrate de que los usuarios/grupos requeridos estén disponibles en el catálogo, ya que no se puede crear un rol sin usuarios/grupos y también el rol asociado con tu usuario debe tener las políticas de permisos mencionadas <link>aquí</link>.',\n 'toolbar.warning.linkText': 'aquí',\n 'toolbar.warning.note': 'Nota',\n 'toolbar.warning.noteText':\n 'Incluso después de ingerir usuarios/grupos en el catálogo y aplicar los permisos mencionados anteriormente, si el botón crear/editar sigue deshabilitado, por favor contacta a tu administrador ya que podrías estar condicionalmente restringido de acceder al botón crear/editar.',\n 'errors.notFound': 'No encontrado',\n 'errors.unauthorized': 'No autorizado para crear un rol',\n 'errors.rbacDisabled':\n 'Habilita el plugin backend RBAC para usar esta funcionalidad.',\n 'errors.rbacDisabledInfo':\n 'Para habilitar RBAC, establece `permission.enabled` en `true` en el archivo de configuración de la aplicación.',\n 'errors.fetchRoles': 'Algo salió mal al obtener los roles',\n 'errors.fetchRole': 'Algo salió mal al obtener el rol',\n 'errors.fetchPolicies':\n 'Algo salió mal al obtener las políticas de permisos',\n 'errors.fetchPoliciesErr': 'Error al obtener las políticas. {{error}}',\n 'errors.fetchPlugins': 'Error al obtener los plugins. {{error}}',\n 'errors.fetchConditionalPermissionPolicies':\n 'Error al obtener las políticas de permisos condicionales. {{error}}',\n 'errors.fetchConditions':\n 'Algo salió mal al obtener las condiciones del rol',\n 'errors.fetchUsersAndGroups': 'Algo salió mal al obtener usuarios y grupos',\n 'errors.createRole': 'No se puede crear el rol.',\n 'errors.editRole': 'No se puede editar el rol.',\n 'errors.deleteRole': 'No se puede eliminar el rol.',\n 'errors.roleCreatedSuccess':\n 'El rol fue creado exitosamente pero no se pudieron agregar las políticas de permisos al rol.',\n 'errors.roleCreatedConditionsSuccess':\n 'El rol fue creado exitosamente pero no se pudieron agregar condiciones al rol.',\n 'roleForm.titles.createRole': 'Crear rol',\n 'roleForm.titles.editRole': 'Editar rol',\n 'roleForm.titles.nameAndDescription':\n 'Ingresa nombre y descripción del rol',\n 'roleForm.titles.usersAndGroups': 'Agregar usuarios y grupos',\n 'roleForm.titles.permissionPolicies': 'Agregar políticas de permisos',\n 'roleForm.review.reviewAndCreate': 'Revisar y crear',\n 'roleForm.review.reviewAndSave': 'Revisar y guardar',\n 'roleForm.review.nameDescriptionOwner':\n 'Nombre, descripción y propietario del rol',\n 'roleForm.review.permissionPoliciesWithCount':\n 'Políticas de permisos ({{count}})',\n 'roleForm.steps.next': 'Siguiente',\n 'roleForm.steps.back': 'Atrás',\n 'roleForm.steps.cancel': 'Cancelar',\n 'roleForm.steps.reset': 'Reiniciar',\n 'roleForm.steps.create': 'Crear',\n 'roleForm.steps.save': 'Guardar',\n 'roleForm.fields.name.label': 'Nombre',\n 'roleForm.fields.name.helperText': 'Ingresa el nombre del rol',\n 'roleForm.fields.description.label': 'Descripción',\n 'roleForm.fields.description.helperText':\n 'Ingresa una breve descripción del rol (El propósito del rol)',\n 'roleForm.fields.owner.label': 'Propietario',\n 'roleForm.fields.owner.helperText':\n 'Opcional: Ingresa un usuario o grupo que tendrá permiso para editar este rol y crear roles adicionales. En el siguiente paso, especifica qué usuarios pueden asignar a sus roles y a qué plugins pueden otorgar acceso. Si se deja en blanco, asigna automáticamente el autor en la creación.',\n 'deleteDialog.title': 'Eliminar rol',\n 'deleteDialog.question': '¿Eliminar este rol?',\n 'deleteDialog.confirmation':\n '¿Estás seguro de que quieres eliminar el rol **{{roleName}}**?\\n\\nEliminar este rol es irreversible y eliminará su funcionalidad del sistema. Procede con precaución.\\n\\nLos **{{members}}** asociados con este rol perderán el acceso a todas las **{{permissions}} políticas de permisos** especificadas en este rol.',\n 'deleteDialog.roleNameLabel': 'Nombre del rol',\n 'deleteDialog.roleNameHelper': 'Escribe el nombre del rol para confirmar',\n 'deleteDialog.deleteButton': 'Eliminar',\n 'deleteDialog.cancelButton': 'Cancelar',\n 'deleteDialog.successMessage': 'Rol {{roleName}} eliminado exitosamente',\n 'snackbar.success': 'Éxito',\n 'common.noResults': 'No hay resultados para este rango de fechas.',\n 'common.exportCSV': 'Exportar CSV',\n 'common.csvFilename': 'exportacion-datos.csv',\n 'common.noMembers': 'Sin miembros',\n 'common.groups': 'grupos',\n 'common.group': 'grupo',\n 'common.users': 'usuarios',\n 'common.user': 'usuario',\n 'common.use': 'Usar',\n 'common.refresh': 'Actualizar',\n 'common.edit': 'Editar',\n 'common.unauthorizedToEdit': 'No autorizado para editar',\n 'common.noRecordsFound': 'No se encontraron registros',\n 'common.selectUsersAndGroups': 'Seleccionar usuarios y grupos',\n 'common.clearSearch': 'limpiar búsqueda',\n 'common.closeDrawer': 'Cerrar el cajón',\n 'common.remove': 'Eliminar',\n 'common.addRule': 'Agregar regla',\n 'common.selectRule': 'Seleccionar una regla',\n 'common.rule': 'Regla',\n 'common.removeNestedCondition': 'Eliminar condición anidada',\n 'common.overview': 'Resumen',\n 'common.about': 'Acerca de',\n 'common.description': 'Descripción',\n 'common.modifiedBy': 'Modificado por',\n 'common.lastModified': 'Última modificación',\n 'common.owner': 'Propietario',\n 'common.noUsersAndGroupsSelected': 'No se seleccionaron usuarios y grupos',\n 'common.selectedUsersAndGroupsAppearHere':\n 'Los usuarios y grupos seleccionados aparecen aquí.',\n 'common.name': 'Nombre',\n 'common.type': 'Tipo',\n 'common.members': 'Miembros',\n 'common.actions': 'Acciones',\n 'common.removeMember': 'Eliminar miembro',\n 'common.delete': 'Eliminar',\n 'common.deleteRole': 'Eliminar rol',\n 'common.update': 'Actualizar',\n 'common.editRole': 'Editar rol',\n 'common.checkingPermissions': 'Verificando permisos…',\n 'common.unauthorizedTo': 'No autorizado para {{action}}',\n 'common.performThisAction': 'realizar esta acción',\n 'common.unableToCreatePermissionPolicies':\n 'No se pueden crear las políticas de permisos.',\n 'common.unableToDeletePermissionPolicies':\n 'No se pueden eliminar las políticas de permisos.',\n 'common.unableToRemoveConditions':\n 'No se pueden eliminar las condiciones del rol.',\n 'common.unableToUpdateConditions':\n 'No se pueden actualizar las condiciones.',\n 'common.unableToAddConditions': 'No se pueden agregar condiciones al rol.',\n 'common.roleActionSuccessfully': 'Rol {{roleName}} {{action}} exitosamente',\n 'common.unableToFetchRole': 'No se puede obtener el rol: {{error}}',\n 'common.unableToFetchMembers':\n 'No se pueden obtener los miembros: {{error}}',\n 'common.roleAction': '{{action}} rol',\n 'common.membersCount': '{{count}} miembros',\n 'common.parentGroupCount': '{{count}} grupo padre',\n 'common.childGroupsCount': '{{count}} grupos hijos',\n 'common.searchAndSelectUsersGroups':\n 'Busque y seleccione usuarios y grupos para agregar. Los usuarios y grupos seleccionados aparecerán en la tabla a continuación.',\n 'common.noUsersAndGroupsFound': 'No se encontraron usuarios y grupos.',\n 'common.errorFetchingUserGroups':\n 'Error al obtener usuarios y grupos: {{error}}',\n 'common.nameRequired': 'El nombre es requerido',\n 'common.noMemberSelected': 'Ningún miembro seleccionado',\n 'common.noPluginSelected': 'Ningún plugin seleccionado',\n 'common.pluginRequired': 'El plugin es requerido',\n 'common.permissionRequired': 'El permiso es requerido',\n 'common.editCell': 'Editar...',\n 'common.selectCell': 'Seleccionar...',\n 'common.expandRow': 'expandir fila',\n 'common.configureAccessFor': 'Configurar acceso para',\n 'common.defaultResourceTypeVisible':\n 'Por defecto, el tipo de recurso seleccionado es visible para todos los usuarios agregados. Si quieres restringir o otorgar permisos a reglas de plugin específicas, selecciónalas y agrega los parámetros.',\n 'conditionalAccess.condition': 'Condición',\n 'conditionalAccess.allOf': 'AllOf',\n 'conditionalAccess.anyOf': 'AnyOf',\n 'conditionalAccess.not': 'Not',\n 'conditionalAccess.addNestedCondition': 'Agregar condición anidada',\n 'conditionalAccess.addRule': 'Agregar regla',\n 'conditionalAccess.nestedConditionTooltip':\n 'Las condiciones anidadas son **reglas de 1 nivel dentro de una condición principal**. Te permiten permitir un acceso apropiado utilizando permisos detallados basados en varias condiciones. Puedes agregar múltiples condiciones anidadas.',\n 'conditionalAccess.nestedConditionExample':\n 'Por ejemplo, puedes permitir el acceso a todos los tipos de entidades en la condición principal y usar una condición anidada para limitar el acceso a las entidades propiedad del usuario.',\n 'dialog.cancelRoleCreation': 'Cancelar creación de rol',\n 'dialog.exitRoleCreation': '¿Salir de la creación de rol?',\n 'dialog.exitRoleEditing': '¿Salir de la edición de rol?',\n 'dialog.exitWarning':\n '\\n\\nSalir de esta página descartará permanentemente la información que ingresaste.\\n\\n¿Estás seguro de que quieres salir?',\n 'dialog.discard': 'Descartar',\n 'dialog.cancel': 'Cancelar',\n 'permissionPolicies.helperText':\n 'Por defecto, a los usuarios no se les otorga acceso a ningún plugin. Para otorgar acceso a los usuarios, selecciona los plugins que quieres habilitar. Luego, selecciona qué acciones te gustaría dar permiso al usuario.',\n 'permissionPolicies.allPlugins': 'Todos los plugins ({{count}})',\n 'permissionPolicies.errorFetchingPolicies':\n 'Error al obtener las políticas de permisos: {{error}}',\n 'permissionPolicies.resourceTypeTooltip':\n 'tipo de recurso: {{resourceType}}',\n 'permissionPolicies.advancedPermissionsTooltip':\n 'Usa permisos personalizados avanzados para permitir el acceso a partes específicas del tipo de recurso seleccionado.',\n 'permissionPolicies.noAdvancedPermissionsTooltip':\n 'La personalización avanzada no es compatible con este tipo de recurso.',\n 'permissionPolicies.pluginsSelected': '{{count}} plugins',\n 'permissionPolicies.noPluginsSelected': 'Ningún plugin seleccionado',\n 'permissionPolicies.search': 'Buscar',\n 'permissionPolicies.noRecordsToDisplay': 'No hay registros para mostrar.',\n 'permissionPolicies.selectedPluginsAppearHere':\n 'Los plugins seleccionados aparecen aquí.',\n 'permissionPolicies.selectPlugins': 'Seleccionar plugins',\n 'permissionPolicies.noPluginsFound': 'No se encontraron plugins.',\n 'permissionPolicies.plugin': 'Plugin',\n 'permissionPolicies.permission': 'Permiso',\n 'permissionPolicies.policies': 'Políticas',\n 'permissionPolicies.conditional': 'Condicional',\n 'permissionPolicies.rules': 'reglas',\n 'permissionPolicies.rule': 'regla',\n 'permissionPolicies.permissionPolicies': 'Políticas de permisos',\n 'permissionPolicies.permissions': 'permisos',\n },\n});\n\nexport default rbacTranslationEs;\n"],"names":[],"mappings":"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"}