@backstage-community/plugin-rbac 1.48.1 → 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.
- package/CHANGELOG.md +12 -0
- package/README.md +30 -0
- package/dist/alpha/apis.esm.js +29 -0
- package/dist/alpha/apis.esm.js.map +1 -0
- package/dist/alpha/navItems.esm.js +14 -0
- package/dist/alpha/navItems.esm.js.map +1 -0
- package/dist/alpha/pages.esm.js +14 -0
- package/dist/alpha/pages.esm.js.map +1 -0
- package/dist/{translations → alpha/translations}/de.esm.js +79 -79
- package/dist/alpha/translations/de.esm.js.map +1 -0
- package/dist/alpha/translations/es.esm.js +178 -0
- package/dist/alpha/translations/es.esm.js.map +1 -0
- package/dist/{translations → alpha/translations}/fr.esm.js +1 -0
- package/dist/alpha/translations/fr.esm.js.map +1 -0
- package/dist/alpha/translations/index.esm.js.map +1 -0
- package/dist/{translations → alpha/translations}/it.esm.js +1 -0
- package/dist/alpha/translations/it.esm.js.map +1 -0
- package/dist/{translations → alpha/translations}/ja.esm.js +1 -0
- package/dist/alpha/translations/ja.esm.js.map +1 -0
- package/dist/{translations → alpha/translations}/ref.esm.js +1 -0
- package/dist/alpha/translations/ref.esm.js.map +1 -0
- package/dist/alpha.d.ts +79 -1
- package/dist/alpha.esm.js +30 -2
- package/dist/alpha.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
- package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
- package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
- package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
- package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
- package/dist/components/RbacPage.esm.js +1 -1
- package/dist/components/RbacPage.esm.js.map +1 -1
- package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
- package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
- package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
- package/dist/components/Trans.esm.js.map +1 -1
- package/dist/hooks/useTranslation.esm.js +2 -2
- package/dist/hooks/useTranslation.esm.js.map +1 -1
- package/dist/package.json.esm.js +154 -0
- package/dist/package.json.esm.js.map +1 -0
- package/dist/utils/conditional-access-utils.esm.js.map +1 -1
- package/dist/utils/create-role-utils.esm.js.map +1 -1
- package/dist/utils/rbac-utils.esm.js.map +1 -1
- package/dist/utils/role-form-utils.esm.js.map +1 -1
- package/package.json +12 -3
- package/dist/translations/de.esm.js.map +0 -1
- package/dist/translations/es.esm.js +0 -178
- package/dist/translations/es.esm.js.map +0 -1
- package/dist/translations/fr.esm.js.map +0 -1
- package/dist/translations/index.esm.js.map +0 -1
- package/dist/translations/it.esm.js.map +0 -1
- package/dist/translations/ja.esm.js.map +0 -1
- package/dist/translations/ref.esm.js.map +0 -1
- /package/dist/{translations → alpha/translations}/index.esm.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewStep.esm.js","sources":["../../../src/components/CreateRole/ReviewStep.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { StructuredMetadataTable } from '@backstage/core-components';\n\nimport Typography from '@mui/material/Typography';\n\nimport { getPermissionsNumber } from '../../utils/create-role-utils';\nimport { getMembers } from '../../utils/rbac-utils';\nimport { reviewStepMemebersTableColumns } from './AddedMembersTableColumn';\nimport { ReviewStepTable } from './ReviewStepTable';\nimport { selectedPermissionPoliciesColumn } from './SelectedPermissionPoliciesColumn';\nimport { RoleFormValues } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nconst tableMetadata = (\n values: RoleFormValues,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n const membersKey =\n values.selectedMembers.length > 0\n ? `${t('table.headers.usersAndGroups')} (${getMembers(values.selectedMembers, t)})`\n : t('table.headers.usersAndGroups');\n const permissionPoliciesKey = t(\n 'roleForm.review.permissionPoliciesWithCount' as any,\n { count: String(getPermissionsNumber(values)) },\n );\n return {\n [t('roleForm.review.nameDescriptionOwner')]: (\n <>\n <Typography sx={{ margin: '0px' }}>{values.name}</Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>\n {values.description || '-'}\n </Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>{values.owner || '-'}</Typography>\n </>\n ),\n [membersKey]: (\n <ReviewStepTable\n rows={values.selectedMembers}\n columns={reviewStepMemebersTableColumns(t)}\n tableWrapperWidth={550}\n />\n ),\n [permissionPoliciesKey]: (\n <ReviewStepTable\n rows={values.permissionPoliciesRows}\n columns={selectedPermissionPoliciesColumn(t)}\n tableWrapperWidth={700}\n />\n ),\n };\n};\n\nexport const ReviewStep = ({\n values,\n isEditing,\n}: {\n values: RoleFormValues;\n isEditing: boolean;\n}) => {\n const { t } = useTranslation();\n\n return (\n <div style={{ overflow: 'auto' }}>\n <Typography variant=\"h6\">\n {isEditing\n ? t('roleForm.review.reviewAndSave')\n : t('roleForm.review.reviewAndCreate')}\n </Typography>\n <StructuredMetadataTable\n dense\n metadata={tableMetadata(values, t)}\n options={{ titleFormat: (key: string) => key }}\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6BA,MAAM,aAAA,GAAgB,CACpB,MAAA,EACA,CACG,KAAA;AACH,EAAA,MAAM,aACJ,MAAO,CAAA,eAAA,CAAgB,MAAS,GAAA,CAAA,GAC5B,GAAG,CAAE,CAAA,8BAA8B,CAAC,CAAA,EAAA,EAAK,WAAW,MAAO,CAAA,eAAA,EAAiB,CAAC,CAAC,CAAA,CAAA,CAAA,GAC9E,EAAE,8BAA8B,CAAA;AACtC,EAAA,MAAM,qBAAwB,GAAA,CAAA;AAAA,IAC5B,6CAAA;AAAA,IACA,EAAE,KAAO,EAAA,MAAA,CAAO,oBAAqB,CAAA,MAAM,CAAC,CAAE;AAAA,GAChD;AACA,EAAO,OAAA;AAAA,IACL,CAAC,CAAA,CAAE,sCAAsC,CAAC,mBAEtC,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,iBAAO,IAAK,EAAA,CAAA;AAAA,0BAC/C,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAC7B,QAAO,EAAA,MAAA,CAAA,WAAA,IAAe,GACzB,EAAA,CAAA;AAAA,0BACC,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,QAAO,EAAA,MAAA,CAAA,KAAA,IAAS,GAAI,EAAA;AAAA,KAC1D,EAAA,CAAA;AAAA,IAEF,CAAC,UAAU,mBACT,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,eAAA;AAAA,QACb,OAAA,EAAS,+BAA+B,CAAC,CAAA;AAAA,QACzC,iBAAmB,EAAA;AAAA;AAAA,KACrB;AAAA,IAEF,CAAC,qBAAqB,mBACpB,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,sBAAA;AAAA,QACb,OAAA,EAAS,iCAAiC,CAAC,CAAA;AAAA,QAC3C,iBAAmB,EAAA;AAAA;AAAA;AACrB,GAEJ;AACF,CAAA;AAEO,MAAM,aAAa,CAAC;AAAA,EACzB,MAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EAAA,4BACG,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,QAAA,EAAU,QACtB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,IACjB,EAAA,QAAA,EAAA,SAAA,GACG,EAAE,+BAA+B,CAAA,GACjC,CAAE,CAAA,iCAAiC,CACzC,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,KAAK,EAAA,IAAA;AAAA,QACL,QAAA,EAAU,aAAc,CAAA,MAAA,EAAQ,CAAC,CAAA;AAAA,QACjC,OAAS,EAAA,EAAE,WAAa,EAAA,CAAC,QAAgB,GAAI;AAAA;AAAA;AAC/C,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"ReviewStep.esm.js","sources":["../../../src/components/CreateRole/ReviewStep.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { StructuredMetadataTable } from '@backstage/core-components';\n\nimport Typography from '@mui/material/Typography';\n\nimport { getPermissionsNumber } from '../../utils/create-role-utils';\nimport { getMembers } from '../../utils/rbac-utils';\nimport { reviewStepMemebersTableColumns } from './AddedMembersTableColumn';\nimport { ReviewStepTable } from './ReviewStepTable';\nimport { selectedPermissionPoliciesColumn } from './SelectedPermissionPoliciesColumn';\nimport { RoleFormValues } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nconst tableMetadata = (\n values: RoleFormValues,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n const membersKey =\n values.selectedMembers.length > 0\n ? `${t('table.headers.usersAndGroups')} (${getMembers(values.selectedMembers, t)})`\n : t('table.headers.usersAndGroups');\n const permissionPoliciesKey = t(\n 'roleForm.review.permissionPoliciesWithCount' as any,\n { count: String(getPermissionsNumber(values)) },\n );\n return {\n [t('roleForm.review.nameDescriptionOwner')]: (\n <>\n <Typography sx={{ margin: '0px' }}>{values.name}</Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>\n {values.description || '-'}\n </Typography>\n <br />\n <Typography sx={{ margin: '0px' }}>{values.owner || '-'}</Typography>\n </>\n ),\n [membersKey]: (\n <ReviewStepTable\n rows={values.selectedMembers}\n columns={reviewStepMemebersTableColumns(t)}\n tableWrapperWidth={550}\n />\n ),\n [permissionPoliciesKey]: (\n <ReviewStepTable\n rows={values.permissionPoliciesRows}\n columns={selectedPermissionPoliciesColumn(t)}\n tableWrapperWidth={700}\n />\n ),\n };\n};\n\nexport const ReviewStep = ({\n values,\n isEditing,\n}: {\n values: RoleFormValues;\n isEditing: boolean;\n}) => {\n const { t } = useTranslation();\n\n return (\n <div style={{ overflow: 'auto' }}>\n <Typography variant=\"h6\">\n {isEditing\n ? t('roleForm.review.reviewAndSave')\n : t('roleForm.review.reviewAndCreate')}\n </Typography>\n <StructuredMetadataTable\n dense\n metadata={tableMetadata(values, t)}\n options={{ titleFormat: (key: string) => key }}\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6BA,MAAM,aAAA,GAAgB,CACpB,MAAA,EACA,CACG,KAAA;AACH,EAAA,MAAM,aACJ,MAAO,CAAA,eAAA,CAAgB,MAAS,GAAA,CAAA,GAC5B,GAAG,CAAE,CAAA,8BAA8B,CAAC,CAAA,EAAA,EAAK,WAAW,MAAO,CAAA,eAAA,EAAiB,CAAC,CAAC,CAAA,CAAA,CAAA,GAC9E,EAAE,8BAA8B,CAAA;AACtC,EAAA,MAAM,qBAAwB,GAAA,CAAA;AAAA,IAC5B,6CAAA;AAAA,IACA,EAAE,KAAO,EAAA,MAAA,CAAO,oBAAqB,CAAA,MAAM,CAAC,CAAE;AAAA,GAChD;AACA,EAAO,OAAA;AAAA,IACL,CAAC,CAAA,CAAE,sCAAsC,CAAC,mBAEtC,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,iBAAO,IAAK,EAAA,CAAA;AAAA,0BAC/C,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAC7B,QAAO,EAAA,MAAA,CAAA,WAAA,IAAe,GACzB,EAAA,CAAA;AAAA,0BACC,IAAG,EAAA,EAAA,CAAA;AAAA,sBACJ,GAAA,CAAC,cAAW,EAAI,EAAA,EAAE,QAAQ,KAAM,EAAA,EAAI,QAAO,EAAA,MAAA,CAAA,KAAA,IAAS,GAAI,EAAA;AAAA,KAC1D,EAAA,CAAA;AAAA,IAEF,CAAC,UAAU,mBACT,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,eAAA;AAAA,QACb,OAAA,EAAS,+BAA+B,CAAC,CAAA;AAAA,QACzC,iBAAmB,EAAA;AAAA;AAAA,KACrB;AAAA,IAEF,CAAC,qBAAqB,mBACpB,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,MAAO,CAAA,sBAAA;AAAA,QACb,OAAA,EAAS,iCAAiC,CAAC,CAAA;AAAA,QAC3C,iBAAmB,EAAA;AAAA;AAAA;AACrB,GAEJ;AACF,CAAA;AAEO,MAAM,aAAa,CAAC;AAAA,EACzB,MAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EAAA,4BACG,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,QAAA,EAAU,QACtB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,IACjB,EAAA,QAAA,EAAA,SAAA,GACG,EAAE,+BAA+B,CAAA,GACjC,CAAE,CAAA,iCAAiC,CACzC,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,KAAK,EAAA,IAAA;AAAA,QACL,QAAA,EAAU,aAAc,CAAA,MAAA,EAAQ,CAAC,CAAA;AAAA,QACjC,OAAS,EAAA,EAAE,WAAa,EAAA,CAAC,QAAgB,GAAI;AAAA;AAAA;AAC/C,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectedPermissionPoliciesColumn.esm.js","sources":["../../../src/components/CreateRole/SelectedPermissionPoliciesColumn.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { getPolicyString } from '../../utils/rbac-utils';\nimport { ConditionsData } from '../ConditionalAccess/types';\nimport { RowPolicy } from './types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const selectedPermissionPoliciesColumn = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policies',\n render: (policies: RowPolicy[]) => getPolicyString(policies),\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n render: (conditions: ConditionsData) => {\n const totalRules = getRulesNumber(conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAsBa,MAAA,gCAAA,GAAmC,CAC9C,CACG,KAAA;AACH,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,UAAA;AAAA,MACP,MAAQ,EAAA,CAAC,QAA0B,KAAA,eAAA,CAAgB,QAAQ;AAAA,KAC7D;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,MAAA,EAAQ,CAAC,UAA+B,KAAA;AACtC,QAAM,MAAA,UAAA,GAAa,eAAe,UAAU,CAAA;AAC5C,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"SelectedPermissionPoliciesColumn.esm.js","sources":["../../../src/components/CreateRole/SelectedPermissionPoliciesColumn.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { getPolicyString } from '../../utils/rbac-utils';\nimport { ConditionsData } from '../ConditionalAccess/types';\nimport { RowPolicy } from './types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const selectedPermissionPoliciesColumn = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policies',\n render: (policies: RowPolicy[]) => getPolicyString(policies),\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n render: (conditions: ConditionsData) => {\n const totalRules = getRulesNumber(conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAsBa,MAAA,gCAAA,GAAmC,CAC9C,CACG,KAAA;AACH,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,UAAA;AAAA,MACP,MAAQ,EAAA,CAAC,QAA0B,KAAA,eAAA,CAAgB,QAAQ;AAAA,KAC7D;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,MAAA,EAAQ,CAAC,UAA+B,KAAA;AACtC,QAAM,MAAA,UAAA,GAAa,eAAe,UAAU,CAAA;AAC5C,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
|
|
@@ -18,7 +18,7 @@ const RbacPage = ({ useHeader = true }) => {
|
|
|
18
18
|
return result?.status === "Authorized" ? /* @__PURE__ */ jsxs(Page, { themeId: "tool", children: [
|
|
19
19
|
useHeader && /* @__PURE__ */ jsx(Header, { title: t("page.title") }),
|
|
20
20
|
/* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(DeleteDialogContextProvider, { children: /* @__PURE__ */ jsx(RolesList, {}) }) })
|
|
21
|
-
] }) : /* @__PURE__ */ jsx(ErrorPage, { statusMessage: t("errors.
|
|
21
|
+
] }) : /* @__PURE__ */ jsx(ErrorPage, { status: "403", statusMessage: t("errors.notAllowed") });
|
|
22
22
|
}
|
|
23
23
|
return /* @__PURE__ */ jsx(Progress, {});
|
|
24
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RbacPage.esm.js","sources":["../../src/components/RbacPage.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Content, Header, Page, Progress } from '@backstage/core-components';\n\nimport { RolesList } from './RolesList/RolesList';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { useAsync } from 'react-use';\nimport { ErrorPage } from '@backstage/core-components';\nimport { DeleteDialogContextProvider } from './DeleteDialogContext';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const RbacPage = ({ useHeader = true }: { useHeader?: boolean }) => {\n const rbacApi = useApi(rbacApiRef);\n const { t } = useTranslation();\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n if (!isUserLoading) {\n return result?.status === 'Authorized' ? (\n <Page themeId=\"tool\">\n {useHeader && <Header title={t('page.title')} />}\n <Content>\n <DeleteDialogContextProvider>\n <RolesList />\n </DeleteDialogContextProvider>\n </Content>\n </Page>\n ) : (\n <ErrorPage statusMessage={t('errors.
|
|
1
|
+
{"version":3,"file":"RbacPage.esm.js","sources":["../../src/components/RbacPage.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Content, Header, Page, Progress } from '@backstage/core-components';\n\nimport { RolesList } from './RolesList/RolesList';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { useAsync } from 'react-use';\nimport { ErrorPage } from '@backstage/core-components';\nimport { DeleteDialogContextProvider } from './DeleteDialogContext';\nimport { useTranslation } from '../hooks/useTranslation';\n\nexport const RbacPage = ({ useHeader = true }: { useHeader?: boolean }) => {\n const rbacApi = useApi(rbacApiRef);\n const { t } = useTranslation();\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n if (!isUserLoading) {\n return result?.status === 'Authorized' ? (\n <Page themeId=\"tool\">\n {useHeader && <Header title={t('page.title')} />}\n <Content>\n <DeleteDialogContextProvider>\n <RolesList />\n </DeleteDialogContextProvider>\n </Content>\n </Page>\n ) : (\n <ErrorPage status=\"403\" statusMessage={t('errors.notAllowed')} />\n );\n }\n return <Progress />;\n};\n"],"names":[],"mappings":";;;;;;;;;AAyBO,MAAM,QAAW,GAAA,CAAC,EAAE,SAAA,GAAY,MAAoC,KAAA;AACzE,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,EAAE,OAAA,EAAS,aAAe,EAAA,KAAA,EAAO,QAAW,GAAA,QAAA;AAAA,IAChD,YAAY,MAAM,OAAA,CAAQ,oBAAqB,EAAA;AAAA,IAC/C;AAAC,GACH;AAEA,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA,OAAO,QAAQ,MAAW,KAAA,YAAA,mBACvB,IAAA,CAAA,IAAA,EAAA,EAAK,SAAQ,MACX,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,oBAAc,GAAA,CAAA,MAAA,EAAA,EAAO,KAAO,EAAA,CAAA,CAAE,YAAY,CAAG,EAAA,CAAA;AAAA,0BAC7C,OACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,+BACC,QAAC,kBAAA,GAAA,CAAA,SAAA,EAAA,EAAU,GACb,CACF,EAAA;AAAA,KACF,EAAA,CAAA,uBAEC,SAAU,EAAA,EAAA,MAAA,EAAO,OAAM,aAAe,EAAA,CAAA,CAAE,mBAAmB,CAAG,EAAA,CAAA;AAAA;AAGnE,EAAA,2BAAQ,QAAS,EAAA,EAAA,CAAA;AACnB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MembersListColumns.esm.js","sources":["../../../src/components/RoleOverview/MembersListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport { MembersData } from '../../types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<MembersData>[] => {\n return [\n {\n title: t('common.name'),\n field: 'name',\n type: 'string',\n render: props => {\n return (\n <Link\n to={`/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`}\n >\n {props.name}\n </Link>\n );\n },\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (props: MembersData) => {\n return props.type === 'User' ? '-' : props.members;\n },\n customSort: (a, b) => {\n if (a.members === 0) {\n return -1;\n }\n if (b.members === 0) {\n return 1;\n }\n if (a.members === b.members) {\n return 0;\n }\n return a.members < b.members ? -1 : 1;\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAqBa,MAAA,UAAA,GAAa,CACxB,CAC+B,KAAA;AAC/B,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,QAAQ,CAAS,KAAA,KAAA;AACf,QACE,uBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAI,EAAA,CAAA,SAAA,EAAY,KAAM,CAAA,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,YAEtE,QAAM,EAAA,KAAA,CAAA;AAAA;AAAA,SACT;AAAA;AAEJ,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQ,CAAC,KAAuB,KAAA;AAC9B,QAAA,OAAO,KAAM,CAAA,IAAA,KAAS,MAAS,GAAA,GAAA,GAAM,KAAM,CAAA,OAAA;AAAA,OAC7C;AAAA,MACA,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,CAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,OAAY,KAAA,CAAA,CAAE,OAAS,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,CAAE,CAAA,OAAA,GAAU,CAAE,CAAA,OAAA,GAAU,EAAK,GAAA,CAAA;AAAA;AACtC;AACF,GACF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"MembersListColumns.esm.js","sources":["../../../src/components/RoleOverview/MembersListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport { MembersData } from '../../types';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<MembersData>[] => {\n return [\n {\n title: t('common.name'),\n field: 'name',\n type: 'string',\n render: props => {\n return (\n <Link\n to={`/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`}\n >\n {props.name}\n </Link>\n );\n },\n },\n {\n title: t('common.type'),\n field: 'type',\n type: 'string',\n },\n {\n title: t('common.members'),\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (props: MembersData) => {\n return props.type === 'User' ? '-' : props.members;\n },\n customSort: (a, b) => {\n if (a.members === 0) {\n return -1;\n }\n if (b.members === 0) {\n return 1;\n }\n if (a.members === b.members) {\n return 0;\n }\n return a.members < b.members ? -1 : 1;\n },\n },\n ];\n};\n"],"names":[],"mappings":";;;AAqBa,MAAA,UAAA,GAAa,CACxB,CAC+B,KAAA;AAC/B,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,QAAQ,CAAS,KAAA,KAAA;AACf,QACE,uBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAI,EAAA,CAAA,SAAA,EAAY,KAAM,CAAA,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,YAEtE,QAAM,EAAA,KAAA,CAAA;AAAA;AAAA,SACT;AAAA;AAEJ,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,MACzB,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQ,CAAC,KAAuB,KAAA;AAC9B,QAAA,OAAO,KAAM,CAAA,IAAA,KAAS,MAAS,GAAA,GAAA,GAAM,KAAM,CAAA,OAAA;AAAA,OAC7C;AAAA,MACA,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,UAAO,OAAA,CAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,OAAY,KAAA,CAAA,CAAE,OAAS,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,CAAE,CAAA,OAAA,GAAU,CAAE,CAAA,OAAA,GAAU,EAAK,GAAA,CAAA;AAAA;AACtC;AACF,GACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionsListColumns.esm.js","sources":["../../../src/components/RoleOverview/PermissionsListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TableColumn } from '@backstage/core-components';\n\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<PermissionsData>[] => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n type: 'string',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n type: 'string',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policyString',\n type: 'string',\n customSort: (a, b) => {\n if (a.policies.length === 0) {\n return -1;\n }\n if (b.policies.length === 0) {\n return 1;\n }\n if (a.policies.length === b.policies.length) {\n return 0;\n }\n return a.policies.length < b.policies.length ? -1 : 1;\n },\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n type: 'string',\n render: (permissionsData: PermissionsData) => {\n const totalRules = getRulesNumber(permissionsData.conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;AAsBa,MAAA,UAAA,GAAa,CACxB,CACmC,KAAA;AACnC,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA,QAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,cAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,IAAI,CAAE,CAAA,QAAA,CAAS,MAAW,KAAA,CAAA,CAAE,SAAS,MAAQ,EAAA;AAC3C,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,EAAE,QAAS,CAAA,MAAA,GAAS,CAAE,CAAA,QAAA,CAAS,SAAS,EAAK,GAAA,CAAA;AAAA;AACtD,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAA,EAAQ,CAAC,eAAqC,KAAA;AAC5C,QAAM,MAAA,UAAA,GAAa,cAAe,CAAA,eAAA,CAAgB,UAAU,CAAA;AAC5D,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"PermissionsListColumns.esm.js","sources":["../../../src/components/RoleOverview/PermissionsListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TableColumn } from '@backstage/core-components';\n\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n): TableColumn<PermissionsData>[] => {\n return [\n {\n title: t('permissionPolicies.plugin'),\n field: 'plugin',\n type: 'string',\n },\n {\n title: t('permissionPolicies.permission'),\n field: 'permission',\n type: 'string',\n },\n {\n title: t('permissionPolicies.policies'),\n field: 'policyString',\n type: 'string',\n customSort: (a, b) => {\n if (a.policies.length === 0) {\n return -1;\n }\n if (b.policies.length === 0) {\n return 1;\n }\n if (a.policies.length === b.policies.length) {\n return 0;\n }\n return a.policies.length < b.policies.length ? -1 : 1;\n },\n },\n {\n title: t('permissionPolicies.conditional'),\n field: 'conditions',\n type: 'string',\n render: (permissionsData: PermissionsData) => {\n const totalRules = getRulesNumber(permissionsData.conditions);\n return totalRules\n ? `${totalRules} ${totalRules > 1 ? t('permissionPolicies.rules') : t('permissionPolicies.rule')}`\n : '-';\n },\n },\n ];\n};\n"],"names":[],"mappings":";;AAsBa,MAAA,UAAA,GAAa,CACxB,CACmC,KAAA;AACnC,EAAO,OAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,KAAO,EAAA,QAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,KAAO,EAAA,cAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,EAAA;AAAA;AAET,QAAI,IAAA,CAAA,CAAE,QAAS,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,IAAI,CAAE,CAAA,QAAA,CAAS,MAAW,KAAA,CAAA,CAAE,SAAS,MAAQ,EAAA;AAC3C,UAAO,OAAA,CAAA;AAAA;AAET,QAAA,OAAO,EAAE,QAAS,CAAA,MAAA,GAAS,CAAE,CAAA,QAAA,CAAS,SAAS,EAAK,GAAA,CAAA;AAAA;AACtD,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,MACzC,KAAO,EAAA,YAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAA,EAAQ,CAAC,eAAqC,KAAA;AAC5C,QAAM,MAAA,UAAA,GAAa,cAAe,CAAA,eAAA,CAAgB,UAAU,CAAA;AAC5D,QAAA,OAAO,UACH,GAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAa,GAAA,CAAA,GAAI,CAAE,CAAA,0BAA0B,CAAI,GAAA,CAAA,CAAE,yBAAyB,CAAC,CAC9F,CAAA,GAAA,GAAA;AAAA;AACN;AACF,GACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RolesListColumns.esm.js","sources":["../../../src/components/RolesList/RolesListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { RolesData } from '../../types';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport DeleteRole from './DeleteRole';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n locale: string,\n): TableColumn<RolesData>[] => {\n return [\n {\n title: t('table.headers.name'),\n field: 'name',\n type: 'string',\n render: (props: RolesData) => {\n const { kind, namespace, name } = parseEntityRef(props.name);\n return (\n <Link to={`roles/${kind}/${namespace}/${name}`}>{props.name}</Link>\n );\n },\n },\n {\n title: t('table.headers.usersAndGroups'),\n field: 'members',\n type: 'string',\n align: 'left',\n render: props => getMembers(props.members, t),\n customSort: (a, b) => {\n if (a.members.length === 0) {\n return -1;\n }\n if (b.members.length === 0) {\n return 1;\n }\n if (a.members.length === b.members.length) {\n return 0;\n }\n return a.members.length < b.members.length ? -1 : 1;\n },\n },\n {\n title: t('table.headers.accessiblePlugins'),\n field: 'accessiblePlugins',\n type: 'string',\n align: 'left',\n render: (props: RolesData) => {\n const pls = props.accessiblePlugins.map(\n p => p[0].toLocaleUpperCase(locale) + p.slice(1),\n );\n const plsTooltip = pls.join(', ');\n const plsOverflowCount = pls.length > 2 ? `+ ${pls.length - 2}` : '';\n\n return pls.length > 0 ? (\n <Tooltip title={plsTooltip || ''} placement=\"top-start\">\n <Typography>\n {pls.length === 1\n ? `${pls[0]}`\n : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`}\n </Typography>\n </Tooltip>\n ) : (\n '-'\n );\n },\n },\n {\n title: t('table.headers.actions'),\n sorting: false,\n render: (props: RolesData) => (\n <>\n <EditRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n <DeleteRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n </>\n ),\n },\n ];\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RolesListColumns.esm.js","sources":["../../../src/components/RolesList/RolesListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { RolesData } from '../../types';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport DeleteRole from './DeleteRole';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../alpha/translations';\n\nexport const getColumns = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n locale: string,\n): TableColumn<RolesData>[] => {\n return [\n {\n title: t('table.headers.name'),\n field: 'name',\n type: 'string',\n render: (props: RolesData) => {\n const { kind, namespace, name } = parseEntityRef(props.name);\n return (\n <Link to={`roles/${kind}/${namespace}/${name}`}>{props.name}</Link>\n );\n },\n },\n {\n title: t('table.headers.usersAndGroups'),\n field: 'members',\n type: 'string',\n align: 'left',\n render: props => getMembers(props.members, t),\n customSort: (a, b) => {\n if (a.members.length === 0) {\n return -1;\n }\n if (b.members.length === 0) {\n return 1;\n }\n if (a.members.length === b.members.length) {\n return 0;\n }\n return a.members.length < b.members.length ? -1 : 1;\n },\n },\n {\n title: t('table.headers.accessiblePlugins'),\n field: 'accessiblePlugins',\n type: 'string',\n align: 'left',\n render: (props: RolesData) => {\n const pls = props.accessiblePlugins.map(\n p => p[0].toLocaleUpperCase(locale) + p.slice(1),\n );\n const plsTooltip = pls.join(', ');\n const plsOverflowCount = pls.length > 2 ? `+ ${pls.length - 2}` : '';\n\n return pls.length > 0 ? (\n <Tooltip title={plsTooltip || ''} placement=\"top-start\">\n <Typography>\n {pls.length === 1\n ? `${pls[0]}`\n : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`}\n </Typography>\n </Tooltip>\n ) : (\n '-'\n );\n },\n },\n {\n title: t('table.headers.actions'),\n sorting: false,\n render: (props: RolesData) => (\n <>\n <EditRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n <DeleteRole\n canEdit={props.actionsPermissionResults.edit.allowed}\n roleName={props.name}\n />\n </>\n ),\n },\n ];\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Trans.esm.js","sources":["../../src/components/Trans.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 */\n\nimport { isValidElement, Fragment } from 'react';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { rbacTranslationRef } from '../translations';\n\ntype Messages = typeof rbacTranslationRef.T;\n\ninterface TransProps<TMessages extends { [key in string]: string }> {\n message: keyof TMessages;\n params?: any;\n}\n\nexport const Trans = ({ message, params }: TransProps<Messages>) => {\n const { t } = useTranslation();\n const translatedMessage = t(message, params);\n\n if (params?.link && isValidElement(params.link)) {\n // Replace <link>...</link> in the string with the provided JSX\n const parts = translatedMessage.split(/(<link>[^<]*<\\/link>)/);\n\n return (\n <>\n {parts.map((part, index) => {\n const match = part.match(/^<link>([^<]*)<\\/link>$/);\n if (match) {\n // Replace <link> placeholder with JSX from params\n return <Fragment key={index}>{params.link}</Fragment>;\n }\n return part;\n })}\n </>\n );\n }\n\n return translatedMessage;\n};\n"],"names":["Fragment"],"mappings":";;;;AA2BO,MAAM,KAAQ,GAAA,CAAC,EAAE,OAAA,EAAS,QAAmC,KAAA;AAClE,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAM,MAAA,iBAAA,GAAoB,CAAE,CAAA,OAAA,EAAS,MAAM,CAAA;AAE3C,EAAA,IAAI,MAAQ,EAAA,IAAA,IAAQ,cAAe,CAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAE/C,IAAM,MAAA,KAAA,GAAQ,iBAAkB,CAAA,KAAA,CAAM,uBAAuB,CAAA;AAE7D,IAAA,uBAEK,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAC1B,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,yBAAyB,CAAA;AAClD,MAAA,IAAI,KAAO,EAAA;AAET,QAAA,uBAAQA,GAAAA,CAAAA,UAAAA,EAAA,EAAsB,QAAA,EAAA,MAAA,CAAO,QAAf,KAAoB,CAAA;AAAA;AAE5C,MAAO,OAAA,IAAA;AAAA,KACR,CACH,EAAA,CAAA;AAAA;AAIJ,EAAO,OAAA,iBAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"Trans.esm.js","sources":["../../src/components/Trans.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 */\n\nimport { isValidElement, Fragment } from 'react';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { rbacTranslationRef } from '../alpha/translations';\n\ntype Messages = typeof rbacTranslationRef.T;\n\ninterface TransProps<TMessages extends { [key in string]: string }> {\n message: keyof TMessages;\n params?: any;\n}\n\nexport const Trans = ({ message, params }: TransProps<Messages>) => {\n const { t } = useTranslation();\n const translatedMessage = t(message, params);\n\n if (params?.link && isValidElement(params.link)) {\n // Replace <link>...</link> in the string with the provided JSX\n const parts = translatedMessage.split(/(<link>[^<]*<\\/link>)/);\n\n return (\n <>\n {parts.map((part, index) => {\n const match = part.match(/^<link>([^<]*)<\\/link>$/);\n if (match) {\n // Replace <link> placeholder with JSX from params\n return <Fragment key={index}>{params.link}</Fragment>;\n }\n return part;\n })}\n </>\n );\n }\n\n return translatedMessage;\n};\n"],"names":["Fragment"],"mappings":";;;;AA2BO,MAAM,KAAQ,GAAA,CAAC,EAAE,OAAA,EAAS,QAAmC,KAAA;AAClE,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAM,MAAA,iBAAA,GAAoB,CAAE,CAAA,OAAA,EAAS,MAAM,CAAA;AAE3C,EAAA,IAAI,MAAQ,EAAA,IAAA,IAAQ,cAAe,CAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAE/C,IAAM,MAAA,KAAA,GAAQ,iBAAkB,CAAA,KAAA,CAAM,uBAAuB,CAAA;AAE7D,IAAA,uBAEK,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAC1B,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,yBAAyB,CAAA;AAClD,MAAA,IAAI,KAAO,EAAA;AAET,QAAA,uBAAQA,GAAAA,CAAAA,UAAAA,EAAA,EAAsB,QAAA,EAAA,MAAA,CAAO,QAAf,KAAoB,CAAA;AAAA;AAE5C,MAAO,OAAA,IAAA;AAAA,KACR,CACH,EAAA,CAAA;AAAA;AAIJ,EAAO,OAAA,iBAAA;AACT;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
2
|
-
import '../translations/index.esm.js';
|
|
3
|
-
import { rbacTranslationRef } from '../translations/ref.esm.js';
|
|
2
|
+
import '../alpha/translations/index.esm.js';
|
|
3
|
+
import { rbacTranslationRef } from '../alpha/translations/ref.esm.js';
|
|
4
4
|
|
|
5
5
|
const useTranslation = () => useTranslationRef(rbacTranslationRef);
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.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 useTranslationRef,\n TranslationFunction,\n} from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../translations';\n\n/**\n * @alpha\n */\nexport const useTranslation = (): {\n t: TranslationFunction<typeof rbacTranslationRef.T>;\n} => useTranslationRef(rbacTranslationRef);\n"],"names":[],"mappings":";;;;AAwBa,MAAA,cAAA,GAAiB,MAEzB,iBAAA,CAAkB,kBAAkB;;;;"}
|
|
1
|
+
{"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.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 useTranslationRef,\n TranslationFunction,\n} from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../alpha/translations';\n\n/**\n * @alpha\n */\nexport const useTranslation = (): {\n t: TranslationFunction<typeof rbacTranslationRef.T>;\n} => useTranslationRef(rbacTranslationRef);\n"],"names":[],"mappings":";;;;AAwBa,MAAA,cAAA,GAAiB,MAEzB,iBAAA,CAAkB,kBAAkB;;;;"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
var name = "@backstage-community/plugin-rbac";
|
|
2
|
+
var version = "1.49.0";
|
|
3
|
+
var main = "src/index.ts";
|
|
4
|
+
var types = "src/index.ts";
|
|
5
|
+
var license = "Apache-2.0";
|
|
6
|
+
var publishConfig = {
|
|
7
|
+
access: "public"
|
|
8
|
+
};
|
|
9
|
+
var backstage = {
|
|
10
|
+
role: "frontend-plugin",
|
|
11
|
+
pluginId: "rbac",
|
|
12
|
+
pluginPackages: [
|
|
13
|
+
"@backstage-community/plugin-rbac",
|
|
14
|
+
"@backstage-community/plugin-rbac-backend",
|
|
15
|
+
"@backstage-community/plugin-rbac-common",
|
|
16
|
+
"@backstage-community/plugin-rbac-node"
|
|
17
|
+
]
|
|
18
|
+
};
|
|
19
|
+
var sideEffects = false;
|
|
20
|
+
var exports = {
|
|
21
|
+
".": "./src/index.ts",
|
|
22
|
+
"./alpha": "./src/alpha/index.ts",
|
|
23
|
+
"./package.json": "./package.json"
|
|
24
|
+
};
|
|
25
|
+
var typesVersions = {
|
|
26
|
+
"*": {
|
|
27
|
+
alpha: [
|
|
28
|
+
"src/alpha/index.ts"
|
|
29
|
+
],
|
|
30
|
+
"package.json": [
|
|
31
|
+
"package.json"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
var scripts = {
|
|
36
|
+
build: "backstage-cli package build",
|
|
37
|
+
clean: "backstage-cli package clean",
|
|
38
|
+
"lint:check": "backstage-cli package lint",
|
|
39
|
+
"lint:fix": "backstage-cli package lint --fix",
|
|
40
|
+
postpack: "backstage-cli package postpack",
|
|
41
|
+
prepack: "backstage-cli package prepack",
|
|
42
|
+
start: "backstage-cli package start",
|
|
43
|
+
"start:legacy": "backstage-cli package start --entrypoint dev/legacy.tsx",
|
|
44
|
+
test: "backstage-cli package test --passWithNoTests --coverage",
|
|
45
|
+
tsc: "tsc",
|
|
46
|
+
"prettier:check": "prettier --ignore-unknown --check .",
|
|
47
|
+
"prettier:fix": "prettier --ignore-unknown --write .",
|
|
48
|
+
"ui-test": "start-server-and-test start localhost:3000 'playwright test'",
|
|
49
|
+
"ui-test:legacy": "start-server-and-test start:legacy localhost:3000 'playwright test'"
|
|
50
|
+
};
|
|
51
|
+
var dependencies = {
|
|
52
|
+
"@backstage-community/plugin-rbac-common": "workspace:^",
|
|
53
|
+
"@backstage/catalog-model": "^1.7.6",
|
|
54
|
+
"@backstage/core-components": "^0.18.6",
|
|
55
|
+
"@backstage/core-plugin-api": "^1.12.2",
|
|
56
|
+
"@backstage/frontend-plugin-api": "^0.13.3",
|
|
57
|
+
"@backstage/plugin-app-react": "^0.1.0",
|
|
58
|
+
"@backstage/plugin-catalog": "^1.32.2",
|
|
59
|
+
"@backstage/plugin-catalog-common": "^1.1.7",
|
|
60
|
+
"@backstage/plugin-permission-common": "^0.9.5",
|
|
61
|
+
"@backstage/plugin-permission-react": "^0.4.39",
|
|
62
|
+
"@backstage/theme": "^0.7.1",
|
|
63
|
+
"@mui/icons-material": "5.18.0",
|
|
64
|
+
"@mui/material": "^5.14.18",
|
|
65
|
+
"@mui/styles": "^6.1.7",
|
|
66
|
+
"@rjsf/core": "^5.21.2",
|
|
67
|
+
"@rjsf/mui": "^5.21.2",
|
|
68
|
+
"@rjsf/utils": "^5.21.2",
|
|
69
|
+
"@rjsf/validator-ajv8": "^5.21.2",
|
|
70
|
+
"autosuggest-highlight": "^3.3.4",
|
|
71
|
+
formik: "^2.4.5",
|
|
72
|
+
"react-use": "^17.4.0",
|
|
73
|
+
yup: "^1.3.2"
|
|
74
|
+
};
|
|
75
|
+
var peerDependencies = {
|
|
76
|
+
react: "^16.13.1 || ^17.0.0 || ^18.0.0",
|
|
77
|
+
"react-router-dom": "^6.0.0"
|
|
78
|
+
};
|
|
79
|
+
var devDependencies = {
|
|
80
|
+
"@axe-core/playwright": "^4.11.0",
|
|
81
|
+
"@backstage/cli": "^0.35.3",
|
|
82
|
+
"@backstage/core-app-api": "^1.19.4",
|
|
83
|
+
"@backstage/dev-utils": "^1.1.19",
|
|
84
|
+
"@backstage/frontend-defaults": "^0.3.5",
|
|
85
|
+
"@backstage/test-utils": "^1.7.14",
|
|
86
|
+
"@backstage/ui": "^0.11.2",
|
|
87
|
+
"@playwright/test": "^1.56.1",
|
|
88
|
+
"@testing-library/dom": "^10.0.0",
|
|
89
|
+
"@testing-library/jest-dom": "^6.0.0",
|
|
90
|
+
"@testing-library/react": "^15.0.0",
|
|
91
|
+
"@testing-library/react-hooks": "8.0.1",
|
|
92
|
+
"@testing-library/user-event": "14.6.1",
|
|
93
|
+
"@types/autosuggest-highlight": "3.2.3",
|
|
94
|
+
"@types/node": "22.19.11",
|
|
95
|
+
"@types/react": "^18.2.58",
|
|
96
|
+
msw: "1.3.5",
|
|
97
|
+
react: "^16.13.1 || ^17.0.0 || ^18.0.0",
|
|
98
|
+
"react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
|
|
99
|
+
"react-router-dom": "^6.0.0",
|
|
100
|
+
"start-server-and-test": "2.1.3"
|
|
101
|
+
};
|
|
102
|
+
var files = [
|
|
103
|
+
"dist"
|
|
104
|
+
];
|
|
105
|
+
var repository = {
|
|
106
|
+
type: "git",
|
|
107
|
+
url: "https://github.com/backstage/community-plugins",
|
|
108
|
+
directory: "workspaces/rbac/plugins/rbac"
|
|
109
|
+
};
|
|
110
|
+
var keywords = [
|
|
111
|
+
"backstage",
|
|
112
|
+
"plugin"
|
|
113
|
+
];
|
|
114
|
+
var bugs = "https://github.com/backstage/community-plugins/issues";
|
|
115
|
+
var maintainers = [
|
|
116
|
+
"@PatAKnight"
|
|
117
|
+
];
|
|
118
|
+
var author = "Red Hat";
|
|
119
|
+
var prettier = "@backstage/cli/config/prettier";
|
|
120
|
+
var _package = {
|
|
121
|
+
name: name,
|
|
122
|
+
version: version,
|
|
123
|
+
main: main,
|
|
124
|
+
types: types,
|
|
125
|
+
license: license,
|
|
126
|
+
publishConfig: publishConfig,
|
|
127
|
+
backstage: backstage,
|
|
128
|
+
sideEffects: sideEffects,
|
|
129
|
+
exports: exports,
|
|
130
|
+
typesVersions: typesVersions,
|
|
131
|
+
scripts: scripts,
|
|
132
|
+
dependencies: dependencies,
|
|
133
|
+
peerDependencies: peerDependencies,
|
|
134
|
+
devDependencies: devDependencies,
|
|
135
|
+
files: files,
|
|
136
|
+
repository: repository,
|
|
137
|
+
keywords: keywords,
|
|
138
|
+
bugs: bugs,
|
|
139
|
+
maintainers: maintainers,
|
|
140
|
+
author: author,
|
|
141
|
+
prettier: prettier,
|
|
142
|
+
"lint-staged": {
|
|
143
|
+
"*.{js,jsx,ts,tsx,mjs,cjs}": [
|
|
144
|
+
"eslint --fix",
|
|
145
|
+
"prettier --write"
|
|
146
|
+
],
|
|
147
|
+
"*.{json,md}": [
|
|
148
|
+
"prettier --write"
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export { author, backstage, bugs, _package as default, dependencies, devDependencies, exports, files, keywords, license, main, maintainers, name, peerDependencies, prettier, publishConfig, repository, scripts, sideEffects, types, typesVersions, version };
|
|
154
|
+
//# sourceMappingURL=package.json.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional-access-utils.esm.js","sources":["../../src/utils/conditional-access-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 { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport { RJSFValidationError } from '@rjsf/utils';\n\nimport {\n getConditionButtons,\n criterias,\n} from '../components/ConditionalAccess/const';\nimport {\n AccessConditionsErrors,\n ComplexErrors,\n Condition,\n ConditionsData,\n NestedCriteriaErrors,\n NotConditionType,\n} from '../components/ConditionalAccess/types';\nimport { rbacTranslationRef } from '../translations';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nexport const ruleOptionDisabled = (\n ruleOption: string,\n conditions?: PermissionCondition[],\n) => {\n return !!(conditions || []).find(con => con.rule === ruleOption);\n};\n\nexport const nestedConditionButtons = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return getConditionButtons(t).filter(button => button.val !== 'condition');\n};\n\nexport const extractNestedConditions = (\n conditions: Condition[],\n criteriaTypes: string[],\n nestedConditions: Condition[],\n) => {\n conditions.forEach(c => {\n criteriaTypes.forEach(ct => {\n if (Object.keys(c).includes(ct)) {\n nestedConditions.push(c);\n }\n });\n });\n};\n\nexport const getDefaultRule = (selPluginResourceType: string) => ({\n rule: '',\n resourceType: selPluginResourceType,\n params: {},\n});\n\nexport const getSimpleRulesCount = (\n conditionRow: ConditionsData,\n criteria: string,\n): number => {\n if (criteria === criterias.not) {\n return (conditionRow[criteria as keyof Condition] as PermissionCondition)\n .resourceType\n ? 1\n : 0;\n }\n if (criteria === criterias.condition) {\n return 1;\n }\n return (conditionRow[criteria as keyof Condition] as Condition[]).filter(\n (e: Condition) => 'rule' in e,\n ).length;\n};\n\nexport const initializeErrors = (\n criteria: keyof ConditionsData,\n conditions: ConditionsData,\n): AccessConditionsErrors => {\n const errors: AccessConditionsErrors = {};\n const initialize = (cond: Condition | ConditionsData): ComplexErrors => {\n if ('rule' in cond) {\n return '';\n }\n\n const nestedErrors: NestedCriteriaErrors = {};\n if (cond.allOf) {\n nestedErrors.allOf = (cond.allOf.map(initialize) as string[]) || [];\n }\n if (cond.anyOf) {\n nestedErrors.anyOf = (cond.anyOf.map(initialize) as string[]) || [];\n }\n if (cond.not) {\n nestedErrors.not = (initialize(cond.not) as string) || '';\n }\n\n return nestedErrors;\n };\n\n if (criteria === criterias.condition) {\n errors.condition = '';\n } else if (criteria === criterias.not) {\n const notCondition = conditions.not;\n\n let notConditionType;\n if (notCondition === undefined) {\n notConditionType = NotConditionType.SimpleCondition;\n } else if ('rule' in notCondition) {\n notConditionType = NotConditionType.SimpleCondition;\n } else {\n notConditionType = NotConditionType.NestedCondition;\n }\n\n if (notConditionType === NotConditionType.SimpleCondition) {\n errors.not = '';\n } else {\n errors.not = initialize(conditions.not!);\n }\n } else if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n errors[criteria] = Array.isArray(conditions[criteria])\n ? (conditions[criteria] as Condition[]).map(initialize)\n : [''];\n }\n\n return errors;\n};\n\nexport const resetErrors = (\n criteria: string,\n notConditionType = NotConditionType.SimpleCondition,\n): AccessConditionsErrors => {\n const errors: AccessConditionsErrors = {};\n\n if (\n criteria === criterias.condition ||\n (criteria === criterias.not &&\n notConditionType === NotConditionType.SimpleCondition)\n ) {\n errors[criteria] = '';\n }\n\n if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n errors[criteria] = [''] as ComplexErrors[];\n }\n\n if (\n criteria === criterias.not &&\n notConditionType === NotConditionType.NestedCondition\n ) {\n (errors[criteria] as ComplexErrors) = { [criterias.allOf]: [''] };\n }\n\n return errors;\n};\n\nexport const setErrorMessage = (errors: RJSFValidationError[]) =>\n errors[0] ? `Error in the ${errors[0].property} field.` : '';\n\nexport const getSimpleRuleErrors = (errors: ComplexErrors[]): string[] =>\n (errors.filter(\n (err: ComplexErrors) => typeof err === 'string',\n ) as string[]) || [];\n\nexport const getNestedRuleErrors = (\n errors: ComplexErrors[],\n): NestedCriteriaErrors[] =>\n (errors.filter(\n (err: ComplexErrors) => typeof err !== 'string',\n ) as NestedCriteriaErrors[]) || [];\n\nexport const isNestedConditionRule = (r: Condition): boolean => {\n return (\n criterias.allOf in (r as ConditionsData) ||\n criterias.anyOf in (r as ConditionsData) ||\n criterias.not in (r as ConditionsData)\n );\n};\n\nexport const getNestedConditionSimpleRulesCount = (\n nc: Condition,\n c: string,\n): number => {\n if (c === criterias.not) {\n return (nc[c as keyof Condition] as PermissionCondition).resourceType\n ? 1\n : 0;\n }\n\n return (nc[c as keyof Condition] as Condition[]).filter(\n r => 'resourceType' in r,\n ).length;\n};\n\nexport const getRowStyle = (c: Condition, isNestedCondition: boolean) =>\n isNestedCondition\n ? {\n display:\n (c as PermissionCondition).rule !== undefined ? 'flex' : 'none',\n }\n : { display: 'flex', gap: '10px' };\n\nexport const getRowKey = (isNestedCondition: boolean, ruleIndex: number) =>\n isNestedCondition\n ? `nestedCondition-rule-${ruleIndex}`\n : `condition-rule-${ruleIndex}`;\n\nexport const hasAllOfOrAnyOfErrors = (\n errors: AccessConditionsErrors,\n criteria: string,\n): boolean => {\n if (!errors) return false;\n\n const criteriaErrors = errors[\n criteria as keyof AccessConditionsErrors\n ] as ComplexErrors[];\n const simpleRuleErrors = criteriaErrors.filter(\n e => typeof e === 'string',\n ) as string[];\n const nestedRuleErrors = criteriaErrors.filter(\n e => typeof e !== 'string',\n ) as NestedCriteriaErrors[];\n\n if (simpleRuleErrors.some(e => e.length > 0)) {\n return true;\n }\n\n return nestedRuleErrors.some(err => {\n const nestedCriteria = Object.keys(err)[0] as keyof NestedCriteriaErrors;\n const nestedErrors = err[nestedCriteria];\n\n if (Array.isArray(nestedErrors)) {\n return nestedErrors.some(e => e.length > 0);\n }\n return nestedErrors?.length > 0;\n });\n};\n\nexport const hasSimpleConditionOrNotErrors = (\n errors: AccessConditionsErrors,\n criteria: string,\n): boolean => {\n if (!errors) return false;\n return (\n ((errors[criteria as keyof AccessConditionsErrors] as string) || '')\n .length > 0\n );\n};\n\nexport const hasNestedNotErrors = (\n errors: AccessConditionsErrors,\n conditions: ConditionsData,\n criteria: keyof ConditionsData,\n): boolean => {\n if (!errors) return false;\n const nestedCriteria = Object.keys(conditions[criteria]!)[0];\n const nestedErrors = (\n errors[\n criterias.not as keyof AccessConditionsErrors\n ] as NestedCriteriaErrors\n )[nestedCriteria];\n\n if (Array.isArray(nestedErrors)) {\n return nestedErrors.some(e => e.length > 0);\n }\n return nestedErrors?.length > 0;\n};\n\nexport const isSimpleRule = (con: Condition): boolean => 'rule' in con;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conditional-access-utils.esm.js","sources":["../../src/utils/conditional-access-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 { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport { RJSFValidationError } from '@rjsf/utils';\n\nimport {\n getConditionButtons,\n criterias,\n} from '../components/ConditionalAccess/const';\nimport {\n AccessConditionsErrors,\n ComplexErrors,\n Condition,\n ConditionsData,\n NestedCriteriaErrors,\n NotConditionType,\n} from '../components/ConditionalAccess/types';\nimport { rbacTranslationRef } from '../alpha/translations';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nexport const ruleOptionDisabled = (\n ruleOption: string,\n conditions?: PermissionCondition[],\n) => {\n return !!(conditions || []).find(con => con.rule === ruleOption);\n};\n\nexport const nestedConditionButtons = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n return getConditionButtons(t).filter(button => button.val !== 'condition');\n};\n\nexport const extractNestedConditions = (\n conditions: Condition[],\n criteriaTypes: string[],\n nestedConditions: Condition[],\n) => {\n conditions.forEach(c => {\n criteriaTypes.forEach(ct => {\n if (Object.keys(c).includes(ct)) {\n nestedConditions.push(c);\n }\n });\n });\n};\n\nexport const getDefaultRule = (selPluginResourceType: string) => ({\n rule: '',\n resourceType: selPluginResourceType,\n params: {},\n});\n\nexport const getSimpleRulesCount = (\n conditionRow: ConditionsData,\n criteria: string,\n): number => {\n if (criteria === criterias.not) {\n return (conditionRow[criteria as keyof Condition] as PermissionCondition)\n .resourceType\n ? 1\n : 0;\n }\n if (criteria === criterias.condition) {\n return 1;\n }\n return (conditionRow[criteria as keyof Condition] as Condition[]).filter(\n (e: Condition) => 'rule' in e,\n ).length;\n};\n\nexport const initializeErrors = (\n criteria: keyof ConditionsData,\n conditions: ConditionsData,\n): AccessConditionsErrors => {\n const errors: AccessConditionsErrors = {};\n const initialize = (cond: Condition | ConditionsData): ComplexErrors => {\n if ('rule' in cond) {\n return '';\n }\n\n const nestedErrors: NestedCriteriaErrors = {};\n if (cond.allOf) {\n nestedErrors.allOf = (cond.allOf.map(initialize) as string[]) || [];\n }\n if (cond.anyOf) {\n nestedErrors.anyOf = (cond.anyOf.map(initialize) as string[]) || [];\n }\n if (cond.not) {\n nestedErrors.not = (initialize(cond.not) as string) || '';\n }\n\n return nestedErrors;\n };\n\n if (criteria === criterias.condition) {\n errors.condition = '';\n } else if (criteria === criterias.not) {\n const notCondition = conditions.not;\n\n let notConditionType;\n if (notCondition === undefined) {\n notConditionType = NotConditionType.SimpleCondition;\n } else if ('rule' in notCondition) {\n notConditionType = NotConditionType.SimpleCondition;\n } else {\n notConditionType = NotConditionType.NestedCondition;\n }\n\n if (notConditionType === NotConditionType.SimpleCondition) {\n errors.not = '';\n } else {\n errors.not = initialize(conditions.not!);\n }\n } else if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n errors[criteria] = Array.isArray(conditions[criteria])\n ? (conditions[criteria] as Condition[]).map(initialize)\n : [''];\n }\n\n return errors;\n};\n\nexport const resetErrors = (\n criteria: string,\n notConditionType = NotConditionType.SimpleCondition,\n): AccessConditionsErrors => {\n const errors: AccessConditionsErrors = {};\n\n if (\n criteria === criterias.condition ||\n (criteria === criterias.not &&\n notConditionType === NotConditionType.SimpleCondition)\n ) {\n errors[criteria] = '';\n }\n\n if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n errors[criteria] = [''] as ComplexErrors[];\n }\n\n if (\n criteria === criterias.not &&\n notConditionType === NotConditionType.NestedCondition\n ) {\n (errors[criteria] as ComplexErrors) = { [criterias.allOf]: [''] };\n }\n\n return errors;\n};\n\nexport const setErrorMessage = (errors: RJSFValidationError[]) =>\n errors[0] ? `Error in the ${errors[0].property} field.` : '';\n\nexport const getSimpleRuleErrors = (errors: ComplexErrors[]): string[] =>\n (errors.filter(\n (err: ComplexErrors) => typeof err === 'string',\n ) as string[]) || [];\n\nexport const getNestedRuleErrors = (\n errors: ComplexErrors[],\n): NestedCriteriaErrors[] =>\n (errors.filter(\n (err: ComplexErrors) => typeof err !== 'string',\n ) as NestedCriteriaErrors[]) || [];\n\nexport const isNestedConditionRule = (r: Condition): boolean => {\n return (\n criterias.allOf in (r as ConditionsData) ||\n criterias.anyOf in (r as ConditionsData) ||\n criterias.not in (r as ConditionsData)\n );\n};\n\nexport const getNestedConditionSimpleRulesCount = (\n nc: Condition,\n c: string,\n): number => {\n if (c === criterias.not) {\n return (nc[c as keyof Condition] as PermissionCondition).resourceType\n ? 1\n : 0;\n }\n\n return (nc[c as keyof Condition] as Condition[]).filter(\n r => 'resourceType' in r,\n ).length;\n};\n\nexport const getRowStyle = (c: Condition, isNestedCondition: boolean) =>\n isNestedCondition\n ? {\n display:\n (c as PermissionCondition).rule !== undefined ? 'flex' : 'none',\n }\n : { display: 'flex', gap: '10px' };\n\nexport const getRowKey = (isNestedCondition: boolean, ruleIndex: number) =>\n isNestedCondition\n ? `nestedCondition-rule-${ruleIndex}`\n : `condition-rule-${ruleIndex}`;\n\nexport const hasAllOfOrAnyOfErrors = (\n errors: AccessConditionsErrors,\n criteria: string,\n): boolean => {\n if (!errors) return false;\n\n const criteriaErrors = errors[\n criteria as keyof AccessConditionsErrors\n ] as ComplexErrors[];\n const simpleRuleErrors = criteriaErrors.filter(\n e => typeof e === 'string',\n ) as string[];\n const nestedRuleErrors = criteriaErrors.filter(\n e => typeof e !== 'string',\n ) as NestedCriteriaErrors[];\n\n if (simpleRuleErrors.some(e => e.length > 0)) {\n return true;\n }\n\n return nestedRuleErrors.some(err => {\n const nestedCriteria = Object.keys(err)[0] as keyof NestedCriteriaErrors;\n const nestedErrors = err[nestedCriteria];\n\n if (Array.isArray(nestedErrors)) {\n return nestedErrors.some(e => e.length > 0);\n }\n return nestedErrors?.length > 0;\n });\n};\n\nexport const hasSimpleConditionOrNotErrors = (\n errors: AccessConditionsErrors,\n criteria: string,\n): boolean => {\n if (!errors) return false;\n return (\n ((errors[criteria as keyof AccessConditionsErrors] as string) || '')\n .length > 0\n );\n};\n\nexport const hasNestedNotErrors = (\n errors: AccessConditionsErrors,\n conditions: ConditionsData,\n criteria: keyof ConditionsData,\n): boolean => {\n if (!errors) return false;\n const nestedCriteria = Object.keys(conditions[criteria]!)[0];\n const nestedErrors = (\n errors[\n criterias.not as keyof AccessConditionsErrors\n ] as NestedCriteriaErrors\n )[nestedCriteria];\n\n if (Array.isArray(nestedErrors)) {\n return nestedErrors.some(e => e.length > 0);\n }\n return nestedErrors?.length > 0;\n};\n\nexport const isSimpleRule = (con: Condition): boolean => 'rule' in con;\n"],"names":[],"mappings":";;;AAkCa,MAAA,kBAAA,GAAqB,CAChC,UAAA,EACA,UACG,KAAA;AACH,EAAO,OAAA,CAAC,EAAE,UAAc,IAAA,IAAI,IAAK,CAAA,CAAA,GAAA,KAAO,GAAI,CAAA,IAAA,KAAS,UAAU,CAAA;AACjE;AAEa,MAAA,sBAAA,GAAyB,CACpC,CACG,KAAA;AACH,EAAA,OAAO,oBAAoB,CAAC,CAAA,CAAE,OAAO,CAAU,MAAA,KAAA,MAAA,CAAO,QAAQ,WAAW,CAAA;AAC3E;AAEO,MAAM,uBAA0B,GAAA,CACrC,UACA,EAAA,aAAA,EACA,gBACG,KAAA;AACH,EAAA,UAAA,CAAW,QAAQ,CAAK,CAAA,KAAA;AACtB,IAAA,aAAA,CAAc,QAAQ,CAAM,EAAA,KAAA;AAC1B,MAAA,IAAI,OAAO,IAAK,CAAA,CAAC,CAAE,CAAA,QAAA,CAAS,EAAE,CAAG,EAAA;AAC/B,QAAA,gBAAA,CAAiB,KAAK,CAAC,CAAA;AAAA;AACzB,KACD,CAAA;AAAA,GACF,CAAA;AACH;AAEa,MAAA,cAAA,GAAiB,CAAC,qBAAmC,MAAA;AAAA,EAChE,IAAM,EAAA,EAAA;AAAA,EACN,YAAc,EAAA,qBAAA;AAAA,EACd,QAAQ;AACV,CAAA;AAEa,MAAA,mBAAA,GAAsB,CACjC,YAAA,EACA,QACW,KAAA;AACX,EAAI,IAAA,QAAA,KAAa,UAAU,GAAK,EAAA;AAC9B,IAAA,OAAQ,YAAa,CAAA,QAA2B,CAC7C,CAAA,YAAA,GACC,CACA,GAAA,CAAA;AAAA;AAEN,EAAI,IAAA,QAAA,KAAa,UAAU,SAAW,EAAA;AACpC,IAAO,OAAA,CAAA;AAAA;AAET,EAAQ,OAAA,YAAA,CAAa,QAA2B,CAAkB,CAAA,MAAA;AAAA,IAChE,CAAC,MAAiB,MAAU,IAAA;AAAA,GAC5B,CAAA,MAAA;AACJ;AAEa,MAAA,gBAAA,GAAmB,CAC9B,QAAA,EACA,UAC2B,KAAA;AAC3B,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAM,MAAA,UAAA,GAAa,CAAC,IAAoD,KAAA;AACtE,IAAA,IAAI,UAAU,IAAM,EAAA;AAClB,MAAO,OAAA,EAAA;AAAA;AAGT,IAAA,MAAM,eAAqC,EAAC;AAC5C,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAA,YAAA,CAAa,QAAS,IAAK,CAAA,KAAA,CAAM,GAAI,CAAA,UAAU,KAAkB,EAAC;AAAA;AAEpE,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAA,YAAA,CAAa,QAAS,IAAK,CAAA,KAAA,CAAM,GAAI,CAAA,UAAU,KAAkB,EAAC;AAAA;AAEpE,IAAA,IAAI,KAAK,GAAK,EAAA;AACZ,MAAA,YAAA,CAAa,GAAO,GAAA,UAAA,CAAW,IAAK,CAAA,GAAG,CAAgB,IAAA,EAAA;AAAA;AAGzD,IAAO,OAAA,YAAA;AAAA,GACT;AAEA,EAAI,IAAA,QAAA,KAAa,UAAU,SAAW,EAAA;AACpC,IAAA,MAAA,CAAO,SAAY,GAAA,EAAA;AAAA,GACrB,MAAA,IAAW,QAAa,KAAA,SAAA,CAAU,GAAK,EAAA;AACrC,IAAA,MAAM,eAAe,UAAW,CAAA,GAAA;AAEhC,IAAI,IAAA,gBAAA;AACJ,IAAA,IAAI,iBAAiB,SAAW,EAAA;AAC9B,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,eAAA;AAAA,KACtC,MAAA,IAAW,UAAU,YAAc,EAAA;AACjC,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,eAAA;AAAA,KAC/B,MAAA;AACL,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,eAAA;AAAA;AAGtC,IAAI,IAAA,gBAAA,KAAqB,iBAAiB,eAAiB,EAAA;AACzD,MAAA,MAAA,CAAO,GAAM,GAAA,EAAA;AAAA,KACR,MAAA;AACL,MAAO,MAAA,CAAA,GAAA,GAAM,UAAW,CAAA,UAAA,CAAW,GAAI,CAAA;AAAA;AACzC,aACS,QAAa,KAAA,SAAA,CAAU,KAAS,IAAA,QAAA,KAAa,UAAU,KAAO,EAAA;AACvE,IAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,KAAM,CAAA,OAAA,CAAQ,WAAW,QAAQ,CAAC,CAChD,GAAA,UAAA,CAAW,QAAQ,CAAkB,CAAA,GAAA,CAAI,UAAU,CAAA,GACpD,CAAC,EAAE,CAAA;AAAA;AAGT,EAAO,OAAA,MAAA;AACT;AAEO,MAAM,WAAc,GAAA,CACzB,QACA,EAAA,gBAAA,GAAmB,iBAAiB,eACT,KAAA;AAC3B,EAAA,MAAM,SAAiC,EAAC;AAExC,EACE,IAAA,QAAA,KAAa,UAAU,SACtB,IAAA,QAAA,KAAa,UAAU,GACtB,IAAA,gBAAA,KAAqB,iBAAiB,eACxC,EAAA;AACA,IAAA,MAAA,CAAO,QAAQ,CAAI,GAAA,EAAA;AAAA;AAGrB,EAAA,IAAI,QAAa,KAAA,SAAA,CAAU,KAAS,IAAA,QAAA,KAAa,UAAU,KAAO,EAAA;AAChE,IAAO,MAAA,CAAA,QAAQ,CAAI,GAAA,CAAC,EAAE,CAAA;AAAA;AAGxB,EAAA,IACE,QAAa,KAAA,SAAA,CAAU,GACvB,IAAA,gBAAA,KAAqB,iBAAiB,eACtC,EAAA;AACA,IAAC,MAAA,CAAO,QAAQ,CAAA,GAAsB,EAAE,CAAC,UAAU,KAAK,GAAG,CAAC,EAAE,CAAE,EAAA;AAAA;AAGlE,EAAO,OAAA,MAAA;AACT;AAEa,MAAA,eAAA,GAAkB,CAAC,MAAA,KAC9B,MAAO,CAAA,CAAC,CAAI,GAAA,CAAA,aAAA,EAAgB,MAAO,CAAA,CAAC,CAAE,CAAA,QAAQ,CAAY,OAAA,CAAA,GAAA;AAE/C,MAAA,mBAAA,GAAsB,CAAC,MAAA,KACjC,MAAO,CAAA,MAAA;AAAA,EACN,CAAC,GAAuB,KAAA,OAAO,GAAQ,KAAA;AACzC,CAAA,IAAkB;AAEP,MAAA,mBAAA,GAAsB,CACjC,MAAA,KAEC,MAAO,CAAA,MAAA;AAAA,EACN,CAAC,GAAuB,KAAA,OAAO,GAAQ,KAAA;AACzC,CAAA,IAAgC;AAErB,MAAA,qBAAA,GAAwB,CAAC,CAA0B,KAAA;AAC9D,EAAA,OACE,UAAU,KAAU,IAAA,CAAA,IACpB,UAAU,KAAU,IAAA,CAAA,IACpB,UAAU,GAAQ,IAAA,CAAA;AAEtB;AAEa,MAAA,kCAAA,GAAqC,CAChD,EAAA,EACA,CACW,KAAA;AACX,EAAI,IAAA,CAAA,KAAM,UAAU,GAAK,EAAA;AACvB,IAAA,OAAQ,EAAG,CAAA,CAAoB,CAA0B,CAAA,YAAA,GACrD,CACA,GAAA,CAAA;AAAA;AAGN,EAAQ,OAAA,EAAA,CAAG,CAAoB,CAAkB,CAAA,MAAA;AAAA,IAC/C,OAAK,cAAkB,IAAA;AAAA,GACvB,CAAA,MAAA;AACJ;AAEO,MAAM,WAAc,GAAA,CAAC,CAAc,EAAA,iBAAA,KACxC,iBACI,GAAA;AAAA,EACE,OACG,EAAA,CAAA,CAA0B,IAAS,KAAA,SAAA,GAAY,MAAS,GAAA;AAC7D,CAAA,GACA,EAAE,OAAA,EAAS,MAAQ,EAAA,GAAA,EAAK,MAAO;AAExB,MAAA,SAAA,GAAY,CAAC,iBAA4B,EAAA,SAAA,KACpD,oBACI,CAAwB,qBAAA,EAAA,SAAS,CACjC,CAAA,GAAA,CAAA,eAAA,EAAkB,SAAS,CAAA;AAEpB,MAAA,qBAAA,GAAwB,CACnC,MAAA,EACA,QACY,KAAA;AACZ,EAAI,IAAA,CAAC,QAAe,OAAA,KAAA;AAEpB,EAAM,MAAA,cAAA,GAAiB,OACrB,QACF,CAAA;AACA,EAAA,MAAM,mBAAmB,cAAe,CAAA,MAAA;AAAA,IACtC,CAAA,CAAA,KAAK,OAAO,CAAM,KAAA;AAAA,GACpB;AACA,EAAA,MAAM,mBAAmB,cAAe,CAAA,MAAA;AAAA,IACtC,CAAA,CAAA,KAAK,OAAO,CAAM,KAAA;AAAA,GACpB;AAEA,EAAA,IAAI,iBAAiB,IAAK,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,MAAA,GAAS,CAAC,CAAG,EAAA;AAC5C,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,gBAAA,CAAiB,KAAK,CAAO,GAAA,KAAA;AAClC,IAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,IAAK,CAAA,GAAG,EAAE,CAAC,CAAA;AACzC,IAAM,MAAA,YAAA,GAAe,IAAI,cAAc,CAAA;AAEvC,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAY,CAAG,EAAA;AAC/B,MAAA,OAAO,YAAa,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA;AAE5C,IAAA,OAAO,cAAc,MAAS,GAAA,CAAA;AAAA,GAC/B,CAAA;AACH;AAEa,MAAA,6BAAA,GAAgC,CAC3C,MAAA,EACA,QACY,KAAA;AACZ,EAAI,IAAA,CAAC,QAAe,OAAA,KAAA;AACpB,EAAA,OAAA,CACI,MAAO,CAAA,QAAwC,CAAgB,IAAA,EAAA,EAC9D,MAAS,GAAA,CAAA;AAEhB;AAEO,MAAM,kBAAqB,GAAA,CAChC,MACA,EAAA,UAAA,EACA,QACY,KAAA;AACZ,EAAI,IAAA,CAAC,QAAe,OAAA,KAAA;AACpB,EAAA,MAAM,iBAAiB,MAAO,CAAA,IAAA,CAAK,WAAW,QAAQ,CAAE,EAAE,CAAC,CAAA;AAC3D,EAAA,MAAM,YACJ,GAAA,MAAA,CACE,SAAU,CAAA,GACZ,EACA,cAAc,CAAA;AAEhB,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAY,CAAG,EAAA;AAC/B,IAAA,OAAO,YAAa,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA;AAE5C,EAAA,OAAO,cAAc,MAAS,GAAA,CAAA;AAChC;AAEa,MAAA,YAAA,GAAe,CAAC,GAAA,KAA4B,MAAU,IAAA;;;;"}
|
|
@@ -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":"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"}
|
|
1
|
+
{"version":3,"file":"create-role-utils.esm.js","sources":["../../src/utils/create-role-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as yup from 'yup';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nimport {\n isResourcedPolicy,\n PluginPermissionMetaData,\n PolicyDetails,\n Role,\n RoleBasedPolicy,\n} from '@backstage-community/plugin-rbac-common';\n\nimport { criterias } from '../components/ConditionalAccess/const';\nimport { ConditionsData } from '../components/ConditionalAccess/types';\nimport {\n PermissionPolicies,\n PluginsPermissionPoliciesData,\n PluginsPermissions,\n RoleFormValues,\n SelectedMember,\n} from '../components/CreateRole/types';\nimport {\n MemberEntity,\n PermissionsData,\n RoleBasedConditions,\n UpdatedConditionsData,\n} from '../types';\nimport { capitalizeFirstLetter } from './string-utils';\nimport { rbacTranslationRef } from '../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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"}
|