@backstage-community/plugin-rbac 1.42.2 → 1.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/alpha.d.ts +179 -0
- package/dist/alpha.esm.js +3 -0
- package/dist/alpha.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js +13 -9
- package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +3 -1
- package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +5 -3
- package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js +5 -3
- package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +7 -5
- package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +4 -2
- package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -1
- package/dist/components/ConditionalAccess/const.esm.js +6 -12
- package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
- package/dist/components/CreateRole/AddMembersForm.esm.js +25 -19
- package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
- package/dist/components/CreateRole/AddedMembersTable.esm.js +10 -4
- package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -1
- package/dist/components/CreateRole/AddedMembersTableColumn.esm.js +30 -28
- package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
- package/dist/components/CreateRole/CancelDialog.esm.js +8 -9
- package/dist/components/CreateRole/CancelDialog.esm.js.map +1 -1
- package/dist/components/CreateRole/CreateRolePage.esm.js +8 -6
- package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -1
- package/dist/components/CreateRole/EditRolePage.esm.js +9 -7
- package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +9 -3
- package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js +6 -2
- package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +8 -4
- package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -1
- package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js +11 -6
- package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js.map +1 -1
- package/dist/components/CreateRole/PluginsDropdown.esm.js +4 -2
- package/dist/components/CreateRole/PluginsDropdown.esm.js.map +1 -1
- package/dist/components/CreateRole/ReviewStep.esm.js +9 -7
- package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
- package/dist/components/CreateRole/RoleDetailsForm.esm.js +8 -6
- package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -1
- package/dist/components/CreateRole/RoleForm.esm.js +27 -23
- package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
- package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js +24 -22
- package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
- package/dist/components/DownloadUserStatistics.esm.js +4 -2
- package/dist/components/DownloadUserStatistics.esm.js.map +1 -1
- package/dist/components/EditRole.esm.js +4 -2
- package/dist/components/EditRole.esm.js.map +1 -1
- package/dist/components/RbacPage.esm.js +4 -2
- package/dist/components/RbacPage.esm.js.map +1 -1
- package/dist/components/RoleOverview/AboutCard.esm.js +12 -8
- package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -1
- package/dist/components/RoleOverview/MembersCard.esm.js +18 -9
- package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
- package/dist/components/RoleOverview/MembersListColumns.esm.js +42 -40
- package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
- package/dist/components/RoleOverview/PermissionsCard.esm.js +27 -10
- package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
- package/dist/components/RoleOverview/PermissionsListColumns.esm.js +38 -36
- package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
- package/dist/components/RoleOverview/RoleOverviewPage.esm.js +3 -1
- package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -1
- package/dist/components/RolesList/DeleteRole.esm.js +4 -2
- package/dist/components/RolesList/DeleteRole.esm.js.map +1 -1
- package/dist/components/RolesList/DeleteRoleDialog.esm.js +23 -38
- package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -1
- package/dist/components/RolesList/RolesList.esm.js +19 -9
- package/dist/components/RolesList/RolesList.esm.js.map +1 -1
- package/dist/components/RolesList/RolesListColumns.esm.js +63 -61
- package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
- package/dist/components/RolesList/RolesListToolbar.esm.js +20 -10
- package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -1
- package/dist/components/Router.esm.js +4 -2
- package/dist/components/Router.esm.js.map +1 -1
- package/dist/components/Trans.esm.js +22 -0
- package/dist/components/Trans.esm.js.map +1 -0
- package/dist/hooks/useActionPermissionTooltip.esm.js +10 -5
- package/dist/hooks/useActionPermissionTooltip.esm.js.map +1 -1
- package/dist/hooks/useLanguage.esm.js +7 -0
- package/dist/hooks/useLanguage.esm.js.map +1 -0
- package/dist/hooks/useMembers.esm.js +16 -8
- package/dist/hooks/useMembers.esm.js.map +1 -1
- package/dist/hooks/usePermissionPolicies.esm.js +20 -9
- package/dist/hooks/usePermissionPolicies.esm.js.map +1 -1
- package/dist/hooks/useTranslation.esm.js +8 -0
- package/dist/hooks/useTranslation.esm.js.map +1 -0
- package/dist/translations/de.esm.js +176 -0
- package/dist/translations/de.esm.js.map +1 -0
- package/dist/translations/es.esm.js +176 -0
- package/dist/translations/es.esm.js.map +1 -0
- package/dist/translations/fr.esm.js +176 -0
- package/dist/translations/fr.esm.js.map +1 -0
- package/dist/translations/index.esm.js +15 -0
- package/dist/translations/index.esm.js.map +1 -0
- package/dist/translations/it.esm.js +176 -0
- package/dist/translations/it.esm.js.map +1 -0
- package/dist/translations/ref.esm.js +215 -0
- package/dist/translations/ref.esm.js.map +1 -0
- package/dist/utils/conditional-access-utils.esm.js +4 -4
- package/dist/utils/conditional-access-utils.esm.js.map +1 -1
- package/dist/utils/create-role-utils.esm.js +11 -11
- package/dist/utils/create-role-utils.esm.js.map +1 -1
- package/dist/utils/filter-table-data.esm.js +4 -3
- package/dist/utils/filter-table-data.esm.js.map +1 -1
- package/dist/utils/rbac-utils.esm.js +23 -19
- package/dist/utils/rbac-utils.esm.js.map +1 -1
- package/dist/utils/role-form-utils.esm.js +17 -12
- package/dist/utils/role-form-utils.esm.js.map +1 -1
- package/dist/utils/string-utils.esm.js +2 -2
- package/dist/utils/string-utils.esm.js.map +1 -1
- package/package.json +42 -28
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { isValidElement, Fragment as Fragment$1 } from 'react';
|
|
3
|
+
import { useTranslation } from '../hooks/useTranslation.esm.js';
|
|
4
|
+
|
|
5
|
+
const Trans = ({ message, params }) => {
|
|
6
|
+
const { t } = useTranslation();
|
|
7
|
+
const translatedMessage = t(message, params);
|
|
8
|
+
if (params?.link && isValidElement(params.link)) {
|
|
9
|
+
const parts = translatedMessage.split(/(<link>[^<]*<\/link>)/);
|
|
10
|
+
return /* @__PURE__ */ jsx(Fragment, { children: parts.map((part, index) => {
|
|
11
|
+
const match = part.match(/^<link>([^<]*)<\/link>$/);
|
|
12
|
+
if (match) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Fragment$1, { children: params.link }, index);
|
|
14
|
+
}
|
|
15
|
+
return part;
|
|
16
|
+
}) });
|
|
17
|
+
}
|
|
18
|
+
return translatedMessage;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { Trans };
|
|
22
|
+
//# sourceMappingURL=Trans.esm.js.map
|
|
@@ -0,0 +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,27 +1,32 @@
|
|
|
1
1
|
import { usePermission } from '@backstage/plugin-permission-react';
|
|
2
2
|
import { capitalizeFirstLetter } from '../utils/string-utils.esm.js';
|
|
3
|
+
import { useTranslation } from './useTranslation.esm.js';
|
|
3
4
|
|
|
4
5
|
function useActionPermissionTooltip({
|
|
5
6
|
permission,
|
|
6
7
|
resourceRef,
|
|
7
8
|
canAct,
|
|
8
|
-
action
|
|
9
|
+
action,
|
|
9
10
|
dataTestId,
|
|
10
11
|
fallbackTooltip
|
|
11
12
|
}) {
|
|
13
|
+
const { t } = useTranslation();
|
|
12
14
|
const result = usePermission({ permission, resourceRef });
|
|
13
15
|
const isLoading = result.loading;
|
|
14
16
|
const isAllowed = result.allowed;
|
|
15
17
|
const disable = !(isAllowed && canAct);
|
|
16
18
|
let tooltipText;
|
|
19
|
+
const actionText = action || t("common.performThisAction");
|
|
17
20
|
if (isLoading) {
|
|
18
|
-
tooltipText = "
|
|
21
|
+
tooltipText = t("common.checkingPermissions");
|
|
19
22
|
} else if (disable) {
|
|
20
|
-
tooltipText =
|
|
23
|
+
tooltipText = t("common.unauthorizedTo", { action: actionText });
|
|
21
24
|
} else {
|
|
22
|
-
tooltipText = fallbackTooltip ??
|
|
25
|
+
tooltipText = fallbackTooltip ?? t("common.roleAction", {
|
|
26
|
+
action: capitalizeFirstLetter(actionText)
|
|
27
|
+
});
|
|
23
28
|
}
|
|
24
|
-
const testIdText = disable ? `disable-${
|
|
29
|
+
const testIdText = disable ? `disable-${actionText}-role-${resourceRef}` : `${actionText}-role-${resourceRef}`;
|
|
25
30
|
return {
|
|
26
31
|
isLoading,
|
|
27
32
|
isAllowed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActionPermissionTooltip.esm.js","sources":["../../src/hooks/useActionPermissionTooltip.ts"],"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 { usePermission } from '@backstage/plugin-permission-react';\nimport { capitalizeFirstLetter } from '../utils/string-utils';\n\nexport function useActionPermissionTooltip({\n permission,\n resourceRef,\n canAct,\n action
|
|
1
|
+
{"version":3,"file":"useActionPermissionTooltip.esm.js","sources":["../../src/hooks/useActionPermissionTooltip.ts"],"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 { usePermission } from '@backstage/plugin-permission-react';\nimport { capitalizeFirstLetter } from '../utils/string-utils';\nimport { useTranslation } from './useTranslation';\n\nexport function useActionPermissionTooltip({\n permission,\n resourceRef,\n canAct,\n action,\n dataTestId,\n fallbackTooltip,\n}: {\n permission: any;\n resourceRef: string;\n canAct: boolean;\n action?: string;\n dataTestId?: string;\n fallbackTooltip?: string;\n}) {\n const { t } = useTranslation();\n const result = usePermission({ permission, resourceRef });\n\n const isLoading = result.loading;\n const isAllowed = result.allowed;\n const disable = !(isAllowed && canAct);\n\n let tooltipText: string;\n const actionText = action || t('common.performThisAction');\n\n if (isLoading) {\n tooltipText = t('common.checkingPermissions');\n } else if (disable) {\n tooltipText = t('common.unauthorizedTo' as any, { action: actionText });\n } else {\n tooltipText =\n fallbackTooltip ??\n t('common.roleAction' as any, {\n action: capitalizeFirstLetter(actionText),\n });\n }\n const testIdText = disable\n ? `disable-${actionText}-role-${resourceRef}`\n : `${actionText}-role-${resourceRef}`;\n\n return {\n isLoading,\n isAllowed,\n disable,\n tooltipText,\n testIdText: dataTestId ?? testIdText,\n };\n}\n"],"names":[],"mappings":";;;;AAoBO,SAAS,0BAA2B,CAAA;AAAA,EACzC,UAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAOG,EAAA;AACD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,MAAS,GAAA,aAAA,CAAc,EAAE,UAAA,EAAY,aAAa,CAAA;AAExD,EAAA,MAAM,YAAY,MAAO,CAAA,OAAA;AACzB,EAAA,MAAM,YAAY,MAAO,CAAA,OAAA;AACzB,EAAM,MAAA,OAAA,GAAU,EAAE,SAAa,IAAA,MAAA,CAAA;AAE/B,EAAI,IAAA,WAAA;AACJ,EAAM,MAAA,UAAA,GAAa,MAAU,IAAA,CAAA,CAAE,0BAA0B,CAAA;AAEzD,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,WAAA,GAAc,EAAE,4BAA4B,CAAA;AAAA,aACnC,OAAS,EAAA;AAClB,IAAA,WAAA,GAAc,CAAE,CAAA,uBAAA,EAAgC,EAAE,MAAA,EAAQ,YAAY,CAAA;AAAA,GACjE,MAAA;AACL,IACE,WAAA,GAAA,eAAA,IACA,EAAE,mBAA4B,EAAA;AAAA,MAC5B,MAAA,EAAQ,sBAAsB,UAAU;AAAA,KACzC,CAAA;AAAA;AAEL,EAAM,MAAA,UAAA,GAAa,OACf,GAAA,CAAA,QAAA,EAAW,UAAU,CAAA,MAAA,EAAS,WAAW,CACzC,CAAA,GAAA,CAAA,EAAG,UAAU,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA;AAErC,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAY,UAAc,IAAA;AAAA,GAC5B;AACF;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
2
|
+
import { appLanguageApiRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
+
|
|
4
|
+
const useLanguage = () => useApi(appLanguageApiRef).getLanguage().language;
|
|
5
|
+
|
|
6
|
+
export { useLanguage };
|
|
7
|
+
//# sourceMappingURL=useLanguage.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLanguage.esm.js","sources":["../../src/hooks/useLanguage.ts"],"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 */\nimport { useApi } from '@backstage/core-plugin-api';\nimport { appLanguageApiRef } from '@backstage/core-plugin-api/alpha';\n\nexport const useLanguage = (): string =>\n useApi(appLanguageApiRef).getLanguage().language;\n"],"names":[],"mappings":";;;AAkBO,MAAM,cAAc,MACzB,MAAA,CAAO,iBAAiB,CAAA,CAAE,aAAc,CAAA;;;;"}
|
|
@@ -4,27 +4,33 @@ import { stringifyEntityRef, parseEntityRef } from '@backstage/catalog-model';
|
|
|
4
4
|
import { useApi } from '@backstage/core-plugin-api';
|
|
5
5
|
import { rbacApiRef } from '../api/RBACBackendClient.esm.js';
|
|
6
6
|
import { getMembersFromGroup } from '../utils/rbac-utils.esm.js';
|
|
7
|
+
import { useLanguage } from './useLanguage.esm.js';
|
|
8
|
+
import { useTranslation } from './useTranslation.esm.js';
|
|
7
9
|
|
|
8
|
-
const getErrorText = (role, members) => {
|
|
10
|
+
const getErrorText = (role, members, t) => {
|
|
9
11
|
if (!Array.isArray(role) && role?.statusText) {
|
|
10
12
|
return {
|
|
11
|
-
message:
|
|
13
|
+
message: t("common.unableToFetchRole", {
|
|
14
|
+
error: role.statusText
|
|
15
|
+
})
|
|
12
16
|
};
|
|
13
17
|
} else if (!Array.isArray(members) && members?.statusText) {
|
|
14
18
|
return {
|
|
15
|
-
message:
|
|
19
|
+
message: t("common.unableToFetchMembers", {
|
|
20
|
+
error: members.statusText
|
|
21
|
+
})
|
|
16
22
|
};
|
|
17
23
|
}
|
|
18
24
|
return undefined;
|
|
19
25
|
};
|
|
20
|
-
const getMemberData = (memberResource, ref) => {
|
|
26
|
+
const getMemberData = (memberResource, ref, locale) => {
|
|
21
27
|
if (memberResource) {
|
|
22
28
|
return {
|
|
23
29
|
name: memberResource.spec.profile?.displayName ?? memberResource.metadata.name,
|
|
24
30
|
type: memberResource.kind,
|
|
25
31
|
ref: {
|
|
26
32
|
namespace: memberResource.metadata.namespace,
|
|
27
|
-
kind: memberResource.kind.toLocaleLowerCase(
|
|
33
|
+
kind: memberResource.kind.toLocaleLowerCase(locale),
|
|
28
34
|
name: memberResource.metadata.name
|
|
29
35
|
},
|
|
30
36
|
members: memberResource.kind === "Group" ? getMembersFromGroup(memberResource) : 0
|
|
@@ -44,6 +50,8 @@ const getMemberData = (memberResource, ref) => {
|
|
|
44
50
|
};
|
|
45
51
|
const useMembers = (roleName, pollInterval) => {
|
|
46
52
|
const rbacApi = useApi(rbacApiRef);
|
|
53
|
+
const locale = useLanguage();
|
|
54
|
+
const { t } = useTranslation();
|
|
47
55
|
let data = [];
|
|
48
56
|
const {
|
|
49
57
|
value: role,
|
|
@@ -66,11 +74,11 @@ const useMembers = (roleName, pollInterval) => {
|
|
|
66
74
|
const memberResource = Array.isArray(
|
|
67
75
|
members
|
|
68
76
|
) ? members.find((member) => stringifyEntityRef(member) === ref) : undefined;
|
|
69
|
-
const memberData = getMemberData(memberResource, ref);
|
|
77
|
+
const memberData = getMemberData(memberResource, ref, locale);
|
|
70
78
|
acc.push(memberData);
|
|
71
79
|
return acc;
|
|
72
80
|
}, []) : [],
|
|
73
|
-
[role, members]
|
|
81
|
+
[role, members, locale]
|
|
74
82
|
);
|
|
75
83
|
useInterval(
|
|
76
84
|
() => {
|
|
@@ -83,7 +91,7 @@ const useMembers = (roleName, pollInterval) => {
|
|
|
83
91
|
loading,
|
|
84
92
|
data,
|
|
85
93
|
retry: { roleRetry, membersRetry },
|
|
86
|
-
error: getErrorText(role, members) || roleError || membersError,
|
|
94
|
+
error: getErrorText(role, members, t) || roleError || membersError,
|
|
87
95
|
canReadUsersAndGroups
|
|
88
96
|
};
|
|
89
97
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMembers.esm.js","sources":["../../src/hooks/useMembers.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 { useMemo } from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { MemberEntity, MembersData } from '../types';\nimport { getMembersFromGroup } from '../utils/rbac-utils';\n\nexport type MembersInfo = {\n loading: boolean;\n data: MembersData[];\n retry: { roleRetry: () => void; membersRetry: () => void };\n error?: { message: string };\n canReadUsersAndGroups: boolean;\n};\n\nconst getErrorText = (\n role: any,\n members: any,\n): { message: string } | undefined => {\n if (!Array.isArray(role) && (role as Response)?.statusText) {\n return {\n message:
|
|
1
|
+
{"version":3,"file":"useMembers.esm.js","sources":["../../src/hooks/useMembers.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 { useMemo } from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { MemberEntity, MembersData } from '../types';\nimport { getMembersFromGroup } from '../utils/rbac-utils';\nimport { useLanguage } from './useLanguage';\nimport { useTranslation } from './useTranslation';\n\nexport type MembersInfo = {\n loading: boolean;\n data: MembersData[];\n retry: { roleRetry: () => void; membersRetry: () => void };\n error?: { message: string };\n canReadUsersAndGroups: boolean;\n};\n\nconst getErrorText = (\n role: any,\n members: any,\n t: (key: string, params?: any) => string,\n): { message: string } | undefined => {\n if (!Array.isArray(role) && (role as Response)?.statusText) {\n return {\n message: t('common.unableToFetchRole', {\n error: (role as Response).statusText,\n }),\n };\n } else if (!Array.isArray(members) && (members as Response)?.statusText) {\n return {\n message: t('common.unableToFetchMembers', {\n error: (members as Response).statusText,\n }),\n };\n }\n return undefined;\n};\n\nconst getMemberData = (\n memberResource: MemberEntity | undefined,\n ref: string,\n locale: string,\n) => {\n if (memberResource) {\n return {\n name:\n memberResource.spec.profile?.displayName ??\n memberResource.metadata.name,\n type: memberResource.kind,\n ref: {\n namespace: memberResource.metadata.namespace as string,\n kind: memberResource.kind.toLocaleLowerCase(locale),\n name: memberResource.metadata.name,\n },\n members:\n memberResource.kind === 'Group'\n ? getMembersFromGroup(memberResource)\n : 0,\n };\n }\n const { kind, namespace, name } = parseEntityRef(ref);\n return {\n name,\n type: kind === 'user' ? 'User' : ('Group' as 'User' | 'Group'),\n ref: {\n namespace,\n kind,\n name,\n },\n members: 0,\n };\n};\n\nexport const useMembers = (\n roleName: string,\n pollInterval?: number,\n): MembersInfo => {\n const rbacApi = useApi(rbacApiRef);\n const locale = useLanguage();\n const { t } = useTranslation();\n let data: MembersData[] = [];\n const {\n value: role,\n retry: roleRetry,\n error: roleError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getRole(roleName);\n });\n\n const {\n value: members,\n retry: membersRetry,\n error: membersError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getMembers();\n });\n\n const canReadUsersAndGroups =\n !membersError && Array.isArray(members) && members.length > 0;\n\n const loading = !roleError && !membersError && !role && !members;\n\n data = useMemo(\n () =>\n Array.isArray(role)\n ? role[0].memberReferences.reduce((acc: MembersData[], ref: string) => {\n const memberResource: MemberEntity | undefined = Array.isArray(\n members,\n )\n ? members.find(member => stringifyEntityRef(member) === ref)\n : undefined;\n const memberData = getMemberData(memberResource, ref, locale);\n acc.push(memberData);\n return acc;\n }, [])\n : [],\n [role, members, locale],\n );\n\n useInterval(\n () => {\n roleRetry();\n membersRetry();\n },\n loading ? null : pollInterval || 10000,\n );\n\n return {\n loading,\n data,\n retry: { roleRetry, membersRetry },\n error: getErrorText(role, members, t) || roleError || membersError,\n canReadUsersAndGroups,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -2,30 +2,40 @@ import { useMemo } from 'react';
|
|
|
2
2
|
import { useAsyncRetry, useInterval } from 'react-use';
|
|
3
3
|
import { useApi } from '@backstage/core-plugin-api';
|
|
4
4
|
import { rbacApiRef } from '../api/RBACBackendClient.esm.js';
|
|
5
|
+
import { useLanguage } from './useLanguage.esm.js';
|
|
6
|
+
import { useTranslation } from './useTranslation.esm.js';
|
|
5
7
|
import { getPluginsPermissionPoliciesData } from '../utils/create-role-utils.esm.js';
|
|
6
8
|
import { getPermissionsData, getConditionalPermissionsData } from '../utils/rbac-utils.esm.js';
|
|
7
9
|
|
|
8
|
-
const getErrorText = (policies, permissionPolicies, conditionalPolicies) => {
|
|
10
|
+
const getErrorText = (policies, permissionPolicies, conditionalPolicies, t) => {
|
|
9
11
|
if (!Array.isArray(policies) && policies?.statusText) {
|
|
10
12
|
return {
|
|
11
13
|
name: policies.status,
|
|
12
|
-
message:
|
|
14
|
+
message: t("errors.fetchPoliciesErr", {
|
|
15
|
+
error: policies.statusText
|
|
16
|
+
})
|
|
13
17
|
};
|
|
14
18
|
} else if (!Array.isArray(permissionPolicies) && permissionPolicies?.statusText) {
|
|
15
19
|
return {
|
|
16
20
|
name: permissionPolicies.status,
|
|
17
|
-
message:
|
|
21
|
+
message: t("errors.fetchPlugins", {
|
|
22
|
+
error: permissionPolicies.statusText
|
|
23
|
+
})
|
|
18
24
|
};
|
|
19
25
|
} else if (!Array.isArray(conditionalPolicies) && conditionalPolicies?.statusText) {
|
|
20
26
|
return {
|
|
21
27
|
name: conditionalPolicies.status,
|
|
22
|
-
message:
|
|
28
|
+
message: t("errors.fetchConditionalPermissionPolicies", {
|
|
29
|
+
error: conditionalPolicies.statusText
|
|
30
|
+
})
|
|
23
31
|
};
|
|
24
32
|
}
|
|
25
33
|
return undefined;
|
|
26
34
|
};
|
|
27
35
|
const usePermissionPolicies = (entityReference, pollInterval) => {
|
|
28
36
|
const rbacApi = useApi(rbacApiRef);
|
|
37
|
+
const locale = useLanguage();
|
|
38
|
+
const { t } = useTranslation();
|
|
29
39
|
const {
|
|
30
40
|
value: policies,
|
|
31
41
|
retry: policiesRetry,
|
|
@@ -53,17 +63,18 @@ const usePermissionPolicies = (entityReference, pollInterval) => {
|
|
|
53
63
|
[permissionPolicies]
|
|
54
64
|
);
|
|
55
65
|
const data = useMemo(() => {
|
|
56
|
-
return Array.isArray(policies) ? getPermissionsData(policies, allPermissionPolicies) : [];
|
|
57
|
-
}, [allPermissionPolicies, policies]);
|
|
66
|
+
return Array.isArray(policies) ? getPermissionsData(policies, allPermissionPolicies, t, locale) : [];
|
|
67
|
+
}, [allPermissionPolicies, policies, locale, t]);
|
|
58
68
|
const conditionsData = useMemo(() => {
|
|
59
69
|
const cpp = Array.isArray(conditionalPolicies) ? conditionalPolicies : [];
|
|
60
70
|
const pluginsPermissionsPoliciesData = allPermissionPolicies.length > 0 ? getPluginsPermissionPoliciesData(allPermissionPolicies) : undefined;
|
|
61
71
|
return pluginsPermissionsPoliciesData ? getConditionalPermissionsData(
|
|
62
72
|
cpp,
|
|
63
73
|
pluginsPermissionsPoliciesData,
|
|
64
|
-
allPermissionPolicies
|
|
74
|
+
allPermissionPolicies,
|
|
75
|
+
locale
|
|
65
76
|
) : [];
|
|
66
|
-
}, [allPermissionPolicies, conditionalPolicies]);
|
|
77
|
+
}, [allPermissionPolicies, conditionalPolicies, locale]);
|
|
67
78
|
useInterval(
|
|
68
79
|
() => {
|
|
69
80
|
policiesRetry();
|
|
@@ -76,7 +87,7 @@ const usePermissionPolicies = (entityReference, pollInterval) => {
|
|
|
76
87
|
loading,
|
|
77
88
|
data: [...conditionsData, ...data],
|
|
78
89
|
retry: { policiesRetry, permissionPoliciesRetry, conditionalPoliciesRetry },
|
|
79
|
-
error: policiesError || permissionPoliciesError || conditionalPoliciesError || getErrorText(policies, permissionPolicies, conditionalPolicies)
|
|
90
|
+
error: policiesError || permissionPoliciesError || conditionalPoliciesError || getErrorText(policies, permissionPolicies, conditionalPolicies, t)
|
|
80
91
|
};
|
|
81
92
|
};
|
|
82
93
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePermissionPolicies.esm.js","sources":["../../src/hooks/usePermissionPolicies.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 { useMemo } from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { getPluginsPermissionPoliciesData } from '../utils/create-role-utils';\nimport {\n getConditionalPermissionsData,\n getPermissionsData,\n} from '../utils/rbac-utils';\n\nconst getErrorText = (\n policies: any,\n permissionPolicies: any,\n conditionalPolicies: any,\n): { name: number; message: string } | undefined => {\n if (!Array.isArray(policies) && (policies as Response)?.statusText) {\n return {\n name: (policies as Response).status,\n message:
|
|
1
|
+
{"version":3,"file":"usePermissionPolicies.esm.js","sources":["../../src/hooks/usePermissionPolicies.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 { useMemo } from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { useLanguage } from './useLanguage';\nimport { useTranslation } from './useTranslation';\nimport { getPluginsPermissionPoliciesData } from '../utils/create-role-utils';\nimport {\n getConditionalPermissionsData,\n getPermissionsData,\n} from '../utils/rbac-utils';\n\nconst getErrorText = (\n policies: any,\n permissionPolicies: any,\n conditionalPolicies: any,\n t: (key: string, params?: any) => string,\n): { name: number; message: string } | undefined => {\n if (!Array.isArray(policies) && (policies as Response)?.statusText) {\n return {\n name: (policies as Response).status,\n message: t('errors.fetchPoliciesErr', {\n error: (policies as Response).statusText,\n }),\n };\n } else if (\n !Array.isArray(permissionPolicies) &&\n (permissionPolicies as Response)?.statusText\n ) {\n return {\n name: (permissionPolicies as Response).status,\n message: t('errors.fetchPlugins', {\n error: (permissionPolicies as Response).statusText,\n }),\n };\n } else if (\n !Array.isArray(conditionalPolicies) &&\n (conditionalPolicies as Response)?.statusText\n ) {\n return {\n name: (conditionalPolicies as Response).status,\n message: t('errors.fetchConditionalPermissionPolicies', {\n error: (conditionalPolicies as Response).statusText,\n }),\n };\n }\n return undefined;\n};\n\nexport const usePermissionPolicies = (\n entityReference: string,\n pollInterval?: number,\n) => {\n const rbacApi = useApi(rbacApiRef);\n const locale = useLanguage();\n const { t } = useTranslation();\n const {\n value: policies,\n retry: policiesRetry,\n error: policiesError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getAssociatedPolicies(entityReference);\n });\n\n const {\n value: conditionalPolicies,\n retry: conditionalPoliciesRetry,\n error: conditionalPoliciesError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getRoleConditions(entityReference);\n });\n\n const {\n value: permissionPolicies,\n error: permissionPoliciesError,\n retry: permissionPoliciesRetry,\n } = useAsyncRetry(async () => {\n return await rbacApi.listPermissions();\n });\n\n const loading =\n !permissionPoliciesError &&\n !policiesError &&\n !conditionalPoliciesError &&\n (!permissionPolicies || !policies || !conditionalPolicies);\n\n const allPermissionPolicies = useMemo(\n () => (Array.isArray(permissionPolicies) ? permissionPolicies : []),\n [permissionPolicies],\n );\n\n const data = useMemo(() => {\n return Array.isArray(policies)\n ? getPermissionsData(policies, allPermissionPolicies, t, locale)\n : [];\n }, [allPermissionPolicies, policies, locale, t]);\n\n const conditionsData = useMemo(() => {\n const cpp = Array.isArray(conditionalPolicies) ? conditionalPolicies : [];\n const pluginsPermissionsPoliciesData =\n allPermissionPolicies.length > 0\n ? getPluginsPermissionPoliciesData(allPermissionPolicies)\n : undefined;\n return pluginsPermissionsPoliciesData\n ? getConditionalPermissionsData(\n cpp,\n pluginsPermissionsPoliciesData,\n allPermissionPolicies,\n locale,\n )\n : [];\n }, [allPermissionPolicies, conditionalPolicies, locale]);\n\n useInterval(\n () => {\n policiesRetry();\n permissionPoliciesRetry();\n conditionalPoliciesRetry();\n },\n loading ? null : pollInterval || null,\n );\n return {\n loading,\n data: [...conditionsData, ...data],\n retry: { policiesRetry, permissionPoliciesRetry, conditionalPoliciesRetry },\n error:\n policiesError ||\n permissionPoliciesError ||\n conditionalPoliciesError ||\n getErrorText(policies, permissionPolicies, conditionalPolicies, t),\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
2
|
+
import '../translations/index.esm.js';
|
|
3
|
+
import { rbacTranslationRef } from '../translations/ref.esm.js';
|
|
4
|
+
|
|
5
|
+
const useTranslation = () => useTranslationRef(rbacTranslationRef);
|
|
6
|
+
|
|
7
|
+
export { useTranslation };
|
|
8
|
+
//# sourceMappingURL=useTranslation.esm.js.map
|
|
@@ -0,0 +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;;;;"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
|
|
2
|
+
import { rbacTranslationRef } from './ref.esm.js';
|
|
3
|
+
|
|
4
|
+
const rbacTranslationDe = createTranslationMessages({
|
|
5
|
+
ref: rbacTranslationRef,
|
|
6
|
+
full: true,
|
|
7
|
+
messages: {
|
|
8
|
+
"page.title": "RBAC",
|
|
9
|
+
"page.createRole": "Rolle erstellen",
|
|
10
|
+
"page.editRole": "Rolle bearbeiten",
|
|
11
|
+
"table.title": "Alle Rollen",
|
|
12
|
+
"table.titleWithCount": "Alle Rollen ({{count}})",
|
|
13
|
+
"table.headers.name": "Name",
|
|
14
|
+
"table.headers.usersAndGroups": "Benutzer und Gruppen",
|
|
15
|
+
"table.headers.accessiblePlugins": "Zug\xE4ngliche Plugins",
|
|
16
|
+
"table.headers.actions": "Aktionen",
|
|
17
|
+
"table.emptyContent": "Keine Datens\xE4tze gefunden",
|
|
18
|
+
"table.searchPlaceholder": "Filtern",
|
|
19
|
+
"table.labelRowsSelect": "Zeilen",
|
|
20
|
+
"toolbar.createButton": "Erstellen",
|
|
21
|
+
"toolbar.warning.title": "Rolle kann nicht erstellt werden.",
|
|
22
|
+
"toolbar.warning.message": "Um die Schaltfl\xE4che Rolle erstellen/bearbeiten zu aktivieren, stellen Sie sicher, dass die erforderlichen Benutzer/Gruppen im Katalog verf\xFCgbar sind, da eine Rolle nicht ohne Benutzer/Gruppen erstellt werden kann, und dass die Rolle, die mit Ihrem Benutzer verkn\xFCpft ist, die Berechtigungsrichtlinien <link>hier</link> erw\xE4hnt.",
|
|
23
|
+
"toolbar.warning.linkText": "hier",
|
|
24
|
+
"toolbar.warning.note": "Hinweis",
|
|
25
|
+
"toolbar.warning.noteText": "Selbst nach dem Importieren von Benutzern/Gruppen in den Katalog und dem Anwenden der oben genannten Berechtigungen, wenn die Erstellen/Bearbeiten-Schaltfl\xE4che weiterhin deaktiviert ist, wenden Sie sich bitte an Ihren Administrator, da Sie m\xF6glicherweise bedingt vom Zugriff auf die Erstellen/Bearbeiten-Schaltfl\xE4che eingeschr\xE4nkt sind.",
|
|
26
|
+
"errors.notFound": "Nicht gefunden",
|
|
27
|
+
"errors.unauthorized": "Nicht berechtigt, Rolle zu erstellen",
|
|
28
|
+
"errors.rbacDisabled": "Aktivieren Sie das RBAC-Backend-Plugin, um diese Funktion zu verwenden.",
|
|
29
|
+
"errors.rbacDisabledInfo": "Um RBAC zu aktivieren, setzen Sie `permission.enabled` auf `true` in der App-Konfigurationsdatei.",
|
|
30
|
+
"errors.fetchRoles": "Beim Abrufen der Rollen ist etwas schief gelaufen",
|
|
31
|
+
"errors.fetchRole": "Beim Abrufen der Rolle ist etwas schief gelaufen",
|
|
32
|
+
"errors.fetchPolicies": "Beim Abrufen der Berechtigungsrichtlinien ist etwas schief gelaufen",
|
|
33
|
+
"errors.fetchPoliciesErr": "Fehler beim Abrufen der Richtlinien. {{error}}",
|
|
34
|
+
"errors.fetchPlugins": "Fehler beim Abrufen der Plugins. {{error}}",
|
|
35
|
+
"errors.fetchConditionalPermissionPolicies": "Fehler beim Abrufen der bedingten Berechtigungsrichtlinien. {{error}}",
|
|
36
|
+
"errors.fetchConditions": "Beim Abrufen der Rollenbedingungen ist etwas schief gelaufen",
|
|
37
|
+
"errors.fetchUsersAndGroups": "Beim Abrufen der Benutzer und Gruppen ist etwas schief gelaufen",
|
|
38
|
+
"errors.createRole": "Rolle kann nicht erstellt werden.",
|
|
39
|
+
"errors.editRole": "Rolle kann nicht bearbeitet werden.",
|
|
40
|
+
"errors.deleteRole": "Rolle kann nicht gel\xF6scht werden.",
|
|
41
|
+
"errors.roleCreatedSuccess": "Rolle wurde erfolgreich erstellt, aber Berechtigungsrichtlinien konnten nicht zur Rolle hinzugef\xFCgt werden.",
|
|
42
|
+
"errors.roleCreatedConditionsSuccess": "Rolle wurde erfolgreich erstellt, aber Bedingungen konnten nicht zur Rolle hinzugef\xFCgt werden.",
|
|
43
|
+
"roleForm.titles.createRole": "Rolle erstellen",
|
|
44
|
+
"roleForm.titles.editRole": "Rolle bearbeiten",
|
|
45
|
+
"roleForm.titles.nameAndDescription": "Name und Beschreibung der Rolle eingeben",
|
|
46
|
+
"roleForm.titles.usersAndGroups": "Benutzer und Gruppen hinzuf\xFCgen",
|
|
47
|
+
"roleForm.titles.permissionPolicies": "Berechtigungsrichtlinien hinzuf\xFCgen",
|
|
48
|
+
"roleForm.review.reviewAndCreate": "\xDCberpr\xFCfen und erstellen",
|
|
49
|
+
"roleForm.review.reviewAndSave": "\xDCberpr\xFCfen und speichern",
|
|
50
|
+
"roleForm.review.nameDescriptionOwner": "Name, Beschreibung und Eigent\xFCmer der Rolle",
|
|
51
|
+
"roleForm.steps.next": "Weiter",
|
|
52
|
+
"roleForm.steps.back": "Zur\xFCck",
|
|
53
|
+
"roleForm.steps.cancel": "Abbrechen",
|
|
54
|
+
"roleForm.steps.reset": "Zur\xFCcksetzen",
|
|
55
|
+
"roleForm.steps.create": "Erstellen",
|
|
56
|
+
"roleForm.steps.update": "Aktualisieren",
|
|
57
|
+
"roleForm.fields.name.label": "Name",
|
|
58
|
+
"roleForm.fields.name.helperText": "Name der Rolle eingeben",
|
|
59
|
+
"roleForm.fields.description.label": "Beschreibung",
|
|
60
|
+
"roleForm.fields.description.helperText": "Geben Sie eine kurze Beschreibung der Rolle ein (Der Zweck der Rolle)",
|
|
61
|
+
"roleForm.fields.owner.label": "Eigent\xFCmer",
|
|
62
|
+
"roleForm.fields.owner.helperText": "Optional: Geben Sie einen Benutzer oder eine Gruppe ein, die die Berechtigung haben soll, diese Rolle zu bearbeiten und zus\xE4tzliche Rollen zu erstellen. Im n\xE4chsten Schritt geben Sie an, welche Benutzer sie ihren Rollen zuweisen k\xF6nnen und auf welche Plugins sie Zugriff gew\xE4hren k\xF6nnen. Wenn leer gelassen, wird automatisch der Autor bei der Erstellung zugewiesen.",
|
|
63
|
+
"deleteDialog.title": "Rolle l\xF6schen",
|
|
64
|
+
"deleteDialog.question": "Diese Rolle l\xF6schen?",
|
|
65
|
+
"deleteDialog.confirmation": "Bist du sicher, dass du die Rolle **{{roleName}}** l\xF6schen m\xF6chtest?\n\nDas L\xF6schen dieser Rolle ist irreversibel und entfernt ihre Funktionalit\xE4t aus dem System. Bitte vorsichtig vorgehen.\n\nDie **{{members}}**, die mit dieser Rolle verbunden sind, verlieren den Zugriff auf alle in dieser Rolle angegebenen **{{permissions}} Berechtigungsrichtlinien**.",
|
|
66
|
+
"deleteDialog.roleNameLabel": "Rollenname",
|
|
67
|
+
"deleteDialog.roleNameHelper": "Geben Sie den Namen der Rolle zur Best\xE4tigung ein",
|
|
68
|
+
"deleteDialog.deleteButton": "L\xF6schen",
|
|
69
|
+
"deleteDialog.cancelButton": "Abbrechen",
|
|
70
|
+
"deleteDialog.successMessage": "Rolle {{roleName}} erfolgreich gel\xF6scht",
|
|
71
|
+
"snackbar.success": "Erfolg",
|
|
72
|
+
"common.noResults": "Keine Ergebnisse f\xFCr diesen Zeitraum.",
|
|
73
|
+
"common.exportCSV": "CSV exportieren",
|
|
74
|
+
"common.csvFilename": "daten-export.csv",
|
|
75
|
+
"common.noMembers": "Keine Mitglieder",
|
|
76
|
+
"common.groups": "Gruppen",
|
|
77
|
+
"common.group": "Gruppe",
|
|
78
|
+
"common.users": "Benutzer",
|
|
79
|
+
"common.user": "Benutzer",
|
|
80
|
+
"common.use": "Verwenden",
|
|
81
|
+
"common.refresh": "Aktualisieren",
|
|
82
|
+
"common.edit": "Bearbeiten",
|
|
83
|
+
"common.unauthorizedToEdit": "Nicht berechtigt zu bearbeiten",
|
|
84
|
+
"common.noRecordsFound": "Keine Datens\xE4tze gefunden",
|
|
85
|
+
"common.selectUsersAndGroups": "Benutzer und Gruppen ausw\xE4hlen",
|
|
86
|
+
"common.clearSearch": "Suche l\xF6schen",
|
|
87
|
+
"common.closeDrawer": "Schublade schlie\xDFen",
|
|
88
|
+
"common.remove": "Entfernen",
|
|
89
|
+
"common.addRule": "Regel hinzuf\xFCgen",
|
|
90
|
+
"common.selectRule": "Eine Regel ausw\xE4hlen",
|
|
91
|
+
"common.rule": "Regel",
|
|
92
|
+
"common.removeNestedCondition": "Verschachtelte Bedingung entfernen",
|
|
93
|
+
"common.overview": "\xDCbersicht",
|
|
94
|
+
"common.about": "\xDCber",
|
|
95
|
+
"common.description": "Beschreibung",
|
|
96
|
+
"common.modifiedBy": "Ge\xE4ndert von",
|
|
97
|
+
"common.lastModified": "Zuletzt ge\xE4ndert",
|
|
98
|
+
"common.owner": "Eigent\xFCmer",
|
|
99
|
+
"common.noUsersAndGroupsSelected": "Keine Benutzer und Gruppen ausgew\xE4hlt",
|
|
100
|
+
"common.selectedUsersAndGroupsAppearHere": "Ausgew\xE4hlte Benutzer und Gruppen werden hier angezeigt.",
|
|
101
|
+
"common.name": "Name",
|
|
102
|
+
"common.type": "Typ",
|
|
103
|
+
"common.members": "Mitglieder",
|
|
104
|
+
"common.actions": "Aktionen",
|
|
105
|
+
"common.removeMember": "Mitglied entfernen",
|
|
106
|
+
"common.delete": "L\xF6schen",
|
|
107
|
+
"common.deleteRole": "Rolle l\xF6schen",
|
|
108
|
+
"common.update": "Aktualisieren",
|
|
109
|
+
"common.editRole": "Rolle bearbeiten",
|
|
110
|
+
"common.checkingPermissions": "Berechtigungen werden \xFCberpr\xFCft\u2026",
|
|
111
|
+
"common.unauthorizedTo": "Nicht autorisiert f\xFCr {{action}}",
|
|
112
|
+
"common.performThisAction": "diese Aktion ausf\xFChren",
|
|
113
|
+
"common.unableToCreatePermissionPolicies": "Berechtigungsrichtlinien k\xF6nnen nicht erstellt werden.",
|
|
114
|
+
"common.unableToDeletePermissionPolicies": "Berechtigungsrichtlinien k\xF6nnen nicht gel\xF6scht werden.",
|
|
115
|
+
"common.unableToRemoveConditions": "Bedingungen k\xF6nnen nicht von der Rolle entfernt werden.",
|
|
116
|
+
"common.unableToUpdateConditions": "Bedingungen k\xF6nnen nicht aktualisiert werden.",
|
|
117
|
+
"common.unableToAddConditions": "Bedingungen k\xF6nnen nicht zur Rolle hinzugef\xFCgt werden.",
|
|
118
|
+
"common.roleActionSuccessfully": "Rolle {{roleName}} {{action}} erfolgreich",
|
|
119
|
+
"common.unableToFetchRole": "Rolle kann nicht abgerufen werden: {{error}}",
|
|
120
|
+
"common.unableToFetchMembers": "Mitglieder k\xF6nnen nicht abgerufen werden: {{error}}",
|
|
121
|
+
"common.roleAction": "{{action}} Rolle",
|
|
122
|
+
"common.membersCount": "{{count}} Mitglieder",
|
|
123
|
+
"common.parentGroupCount": "{{count}} \xFCbergeordnete Gruppe",
|
|
124
|
+
"common.childGroupsCount": "{{count}} untergeordnete Gruppen",
|
|
125
|
+
"common.searchAndSelectUsersGroups": "Suchen und w\xE4hlen Sie Benutzer und Gruppen aus, die hinzugef\xFCgt werden sollen. Ausgew\xE4hlte Benutzer und Gruppen werden in der Tabelle unten angezeigt.",
|
|
126
|
+
"common.noUsersAndGroupsFound": "Keine Benutzer und Gruppen gefunden.",
|
|
127
|
+
"common.errorFetchingUserGroups": "Fehler beim Abrufen von Benutzern und Gruppen: {{error}}",
|
|
128
|
+
"common.nameRequired": "Name ist erforderlich",
|
|
129
|
+
"common.noMemberSelected": "Kein Mitglied ausgew\xE4hlt",
|
|
130
|
+
"common.noPluginSelected": "Kein Plugin ausgew\xE4hlt",
|
|
131
|
+
"common.pluginRequired": "Plugin ist erforderlich",
|
|
132
|
+
"common.permissionRequired": "Berechtigung ist erforderlich",
|
|
133
|
+
"common.editCell": "Bearbeiten...",
|
|
134
|
+
"common.selectCell": "Ausw\xE4hlen...",
|
|
135
|
+
"common.expandRow": "Zeile erweitern",
|
|
136
|
+
"common.configureAccessFor": "Zugriff konfigurieren f\xFCr",
|
|
137
|
+
"common.defaultResourceTypeVisible": "Standardm\xE4\xDFig ist der ausgew\xE4hlte Ressourcentyp f\xFCr alle hinzugef\xFCgten Benutzer sichtbar. Wenn Sie den Zugriff einschr\xE4nken oder Berechtigungen f\xFCr bestimmte Plugin-Regeln gew\xE4hren m\xF6chten, w\xE4hlen Sie diese aus und f\xFCgen Sie die Parameter hinzu.",
|
|
138
|
+
"conditionalAccess.condition": "Bedingung",
|
|
139
|
+
"conditionalAccess.allOf": "AllOf",
|
|
140
|
+
"conditionalAccess.anyOf": "AnyOf",
|
|
141
|
+
"conditionalAccess.not": "Not",
|
|
142
|
+
"conditionalAccess.addNestedCondition": "Verschachtelte Bedingung hinzuf\xFCgen",
|
|
143
|
+
"conditionalAccess.addRule": "Regel hinzuf\xFCgen",
|
|
144
|
+
"conditionalAccess.nestedConditionTooltip": "Verschachtelte Bedingungen sind **1-Layer-Regeln innerhalb einer Hauptbedingung**. Sie erm\xF6glichen es Ihnen, angemessenen Zugriff zu gew\xE4hren, indem Sie detaillierte Berechtigungen basierend auf verschiedenen Bedingungen verwenden. Sie k\xF6nnen mehrere verschachtelte Bedingungen hinzuf\xFCgen.",
|
|
145
|
+
"conditionalAccess.nestedConditionExample": "Sie k\xF6nnen beispielsweise Zugriff auf alle Entit\xE4tstypen in der Hauptbedingung gew\xE4hren und eine verschachtelte Bedingung verwenden, um den Zugriff auf Entit\xE4ten zu beschr\xE4nken, die dem Benutzer geh\xF6ren.",
|
|
146
|
+
"dialog.cancelRoleCreation": "Rollenerstellung abbrechen",
|
|
147
|
+
"dialog.exitRoleCreation": "Rollenerstellung beenden?",
|
|
148
|
+
"dialog.exitRoleEditing": "Rollenbearbeitung beenden?",
|
|
149
|
+
"dialog.exitWarning": "\n\nDas Verlassen dieser Seite verwirft dauerhaft die von Ihnen eingegebenen Informationen.\n\nM\xF6chten Sie wirklich beenden?",
|
|
150
|
+
"dialog.discard": "Verwerfen",
|
|
151
|
+
"dialog.cancel": "Abbrechen",
|
|
152
|
+
"permissionPolicies.helperText": "Standardm\xE4\xDFig erhalten Benutzer keinen Zugriff auf Plugins. Um Benutzerzugriff zu gew\xE4hren, w\xE4hlen Sie die Plugins aus, die Sie aktivieren m\xF6chten. W\xE4hlen Sie dann aus, welche Aktionen Sie dem Benutzer erlauben m\xF6chten.",
|
|
153
|
+
"permissionPolicies.allPlugins": "Alle Plugins ({{count}})",
|
|
154
|
+
"permissionPolicies.errorFetchingPolicies": "Fehler beim Abrufen der Berechtigungsrichtlinien: {{error}}",
|
|
155
|
+
"permissionPolicies.resourceTypeTooltip": "Ressourcentyp: {{resourceType}}",
|
|
156
|
+
"permissionPolicies.advancedPermissionsTooltip": "Verwenden Sie erweiterte angepasste Berechtigungen, um Zugriff auf bestimmte Teile des ausgew\xE4hlten Ressourcentyps zu gew\xE4hren.",
|
|
157
|
+
"permissionPolicies.pluginsSelected": "{{count}} Plugins",
|
|
158
|
+
"permissionPolicies.noPluginsSelected": "Keine Plugins ausgew\xE4hlt",
|
|
159
|
+
"permissionPolicies.search": "Suchen",
|
|
160
|
+
"permissionPolicies.noRecordsToDisplay": "Keine Datens\xE4tze anzuzeigen.",
|
|
161
|
+
"permissionPolicies.selectedPluginsAppearHere": "Ausgew\xE4hlte Plugins erscheinen hier.",
|
|
162
|
+
"permissionPolicies.selectPlugins": "Plugins ausw\xE4hlen",
|
|
163
|
+
"permissionPolicies.noPluginsFound": "Keine Plugins gefunden.",
|
|
164
|
+
"permissionPolicies.plugin": "Plugin",
|
|
165
|
+
"permissionPolicies.permission": "Berechtigung",
|
|
166
|
+
"permissionPolicies.policies": "Richtlinien",
|
|
167
|
+
"permissionPolicies.conditional": "Bedingt",
|
|
168
|
+
"permissionPolicies.rules": "Regeln",
|
|
169
|
+
"permissionPolicies.rule": "Regel",
|
|
170
|
+
"permissionPolicies.permissionPolicies": "Berechtigungsrichtlinien",
|
|
171
|
+
"permissionPolicies.permissions": "Berechtigungen"
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
export { rbacTranslationDe as default };
|
|
176
|
+
//# sourceMappingURL=de.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from './ref';\n\nconst rbacTranslationDe = createTranslationMessages({\n ref: rbacTranslationRef,\n full: true,\n messages: {\n 'page.title': 'RBAC',\n 'page.createRole': 'Rolle erstellen',\n 'page.editRole': 'Rolle bearbeiten',\n 'table.title': 'Alle Rollen',\n 'table.titleWithCount': 'Alle Rollen ({{count}})',\n 'table.headers.name': 'Name',\n 'table.headers.usersAndGroups': 'Benutzer und Gruppen',\n 'table.headers.accessiblePlugins': 'Zugängliche Plugins',\n 'table.headers.actions': 'Aktionen',\n 'table.emptyContent': 'Keine Datensätze gefunden',\n 'table.searchPlaceholder': 'Filtern',\n 'table.labelRowsSelect': 'Zeilen',\n 'toolbar.createButton': 'Erstellen',\n 'toolbar.warning.title': 'Rolle kann nicht erstellt werden.',\n 'toolbar.warning.message':\n 'Um die Schaltfläche Rolle erstellen/bearbeiten zu aktivieren, stellen Sie sicher, dass die erforderlichen Benutzer/Gruppen im Katalog verfügbar sind, da eine Rolle nicht ohne Benutzer/Gruppen erstellt werden kann, und dass die Rolle, die mit Ihrem Benutzer verknüpft ist, die Berechtigungsrichtlinien <link>hier</link> erwähnt.',\n 'toolbar.warning.linkText': 'hier',\n 'toolbar.warning.note': 'Hinweis',\n 'toolbar.warning.noteText':\n 'Selbst nach dem Importieren von Benutzern/Gruppen in den Katalog und dem Anwenden der oben genannten Berechtigungen, wenn die Erstellen/Bearbeiten-Schaltfläche weiterhin deaktiviert ist, wenden Sie sich bitte an Ihren Administrator, da Sie möglicherweise bedingt vom Zugriff auf die Erstellen/Bearbeiten-Schaltfläche eingeschränkt sind.',\n 'errors.notFound': 'Nicht gefunden',\n 'errors.unauthorized': 'Nicht berechtigt, Rolle zu erstellen',\n 'errors.rbacDisabled':\n 'Aktivieren Sie das RBAC-Backend-Plugin, um diese Funktion zu verwenden.',\n 'errors.rbacDisabledInfo':\n 'Um RBAC zu aktivieren, setzen Sie `permission.enabled` auf `true` in der App-Konfigurationsdatei.',\n 'errors.fetchRoles': 'Beim Abrufen der Rollen ist etwas schief gelaufen',\n 'errors.fetchRole': 'Beim Abrufen der Rolle ist etwas schief gelaufen',\n 'errors.fetchPolicies':\n 'Beim Abrufen der Berechtigungsrichtlinien ist etwas schief gelaufen',\n 'errors.fetchPoliciesErr': 'Fehler beim Abrufen der Richtlinien. {{error}}',\n 'errors.fetchPlugins': 'Fehler beim Abrufen der Plugins. {{error}}',\n 'errors.fetchConditionalPermissionPolicies':\n 'Fehler beim Abrufen der bedingten Berechtigungsrichtlinien. {{error}}',\n 'errors.fetchConditions':\n 'Beim Abrufen der Rollenbedingungen ist etwas schief gelaufen',\n 'errors.fetchUsersAndGroups':\n 'Beim Abrufen der Benutzer und Gruppen ist etwas schief gelaufen',\n 'errors.createRole': 'Rolle kann nicht erstellt werden.',\n 'errors.editRole': 'Rolle kann nicht bearbeitet werden.',\n 'errors.deleteRole': 'Rolle kann nicht gelöscht werden.',\n 'errors.roleCreatedSuccess':\n 'Rolle wurde erfolgreich erstellt, aber Berechtigungsrichtlinien konnten nicht zur Rolle hinzugefügt werden.',\n 'errors.roleCreatedConditionsSuccess':\n 'Rolle wurde erfolgreich erstellt, aber Bedingungen konnten nicht zur Rolle hinzugefügt werden.',\n 'roleForm.titles.createRole': 'Rolle erstellen',\n 'roleForm.titles.editRole': 'Rolle bearbeiten',\n 'roleForm.titles.nameAndDescription':\n 'Name und Beschreibung der Rolle eingeben',\n 'roleForm.titles.usersAndGroups': 'Benutzer und Gruppen hinzufügen',\n 'roleForm.titles.permissionPolicies': 'Berechtigungsrichtlinien hinzufügen',\n 'roleForm.review.reviewAndCreate': 'Überprüfen und erstellen',\n 'roleForm.review.reviewAndSave': 'Überprüfen und speichern',\n 'roleForm.review.nameDescriptionOwner':\n 'Name, Beschreibung und Eigentümer der Rolle',\n 'roleForm.steps.next': 'Weiter',\n 'roleForm.steps.back': 'Zurück',\n 'roleForm.steps.cancel': 'Abbrechen',\n 'roleForm.steps.reset': 'Zurücksetzen',\n 'roleForm.steps.create': 'Erstellen',\n 'roleForm.steps.update': 'Aktualisieren',\n 'roleForm.fields.name.label': 'Name',\n 'roleForm.fields.name.helperText': 'Name der Rolle eingeben',\n 'roleForm.fields.description.label': 'Beschreibung',\n 'roleForm.fields.description.helperText':\n 'Geben Sie eine kurze Beschreibung der Rolle ein (Der Zweck der Rolle)',\n 'roleForm.fields.owner.label': 'Eigentümer',\n 'roleForm.fields.owner.helperText':\n 'Optional: Geben Sie einen Benutzer oder eine Gruppe ein, die die Berechtigung haben soll, diese Rolle zu bearbeiten und zusätzliche Rollen zu erstellen. Im nächsten Schritt geben Sie an, welche Benutzer sie ihren Rollen zuweisen können und auf welche Plugins sie Zugriff gewähren können. Wenn leer gelassen, wird automatisch der Autor bei der Erstellung zugewiesen.',\n 'deleteDialog.title': 'Rolle löschen',\n 'deleteDialog.question': 'Diese Rolle löschen?',\n 'deleteDialog.confirmation':\n 'Bist du sicher, dass du die Rolle **{{roleName}}** löschen möchtest?\\n\\nDas Löschen dieser Rolle ist irreversibel und entfernt ihre Funktionalität aus dem System. Bitte vorsichtig vorgehen.\\n\\nDie **{{members}}**, die mit dieser Rolle verbunden sind, verlieren den Zugriff auf alle in dieser Rolle angegebenen **{{permissions}} Berechtigungsrichtlinien**.',\n 'deleteDialog.roleNameLabel': 'Rollenname',\n 'deleteDialog.roleNameHelper':\n 'Geben Sie den Namen der Rolle zur Bestätigung ein',\n 'deleteDialog.deleteButton': 'Löschen',\n 'deleteDialog.cancelButton': 'Abbrechen',\n 'deleteDialog.successMessage': 'Rolle {{roleName}} erfolgreich gelöscht',\n 'snackbar.success': 'Erfolg',\n 'common.noResults': 'Keine Ergebnisse für diesen Zeitraum.',\n 'common.exportCSV': 'CSV exportieren',\n 'common.csvFilename': 'daten-export.csv',\n 'common.noMembers': 'Keine Mitglieder',\n 'common.groups': 'Gruppen',\n 'common.group': 'Gruppe',\n 'common.users': 'Benutzer',\n 'common.user': 'Benutzer',\n 'common.use': 'Verwenden',\n 'common.refresh': 'Aktualisieren',\n 'common.edit': 'Bearbeiten',\n 'common.unauthorizedToEdit': 'Nicht berechtigt zu bearbeiten',\n 'common.noRecordsFound': 'Keine Datensätze gefunden',\n 'common.selectUsersAndGroups': 'Benutzer und Gruppen auswählen',\n 'common.clearSearch': 'Suche löschen',\n 'common.closeDrawer': 'Schublade schließen',\n 'common.remove': 'Entfernen',\n 'common.addRule': 'Regel hinzufügen',\n 'common.selectRule': 'Eine Regel auswählen',\n 'common.rule': 'Regel',\n 'common.removeNestedCondition': 'Verschachtelte Bedingung entfernen',\n 'common.overview': 'Übersicht',\n 'common.about': 'Über',\n 'common.description': 'Beschreibung',\n 'common.modifiedBy': 'Geändert von',\n 'common.lastModified': 'Zuletzt geändert',\n 'common.owner': 'Eigentümer',\n 'common.noUsersAndGroupsSelected': 'Keine Benutzer und Gruppen ausgewählt',\n 'common.selectedUsersAndGroupsAppearHere':\n 'Ausgewählte Benutzer und Gruppen werden hier angezeigt.',\n 'common.name': 'Name',\n 'common.type': 'Typ',\n 'common.members': 'Mitglieder',\n 'common.actions': 'Aktionen',\n 'common.removeMember': 'Mitglied entfernen',\n 'common.delete': 'Löschen',\n 'common.deleteRole': 'Rolle löschen',\n 'common.update': 'Aktualisieren',\n 'common.editRole': 'Rolle bearbeiten',\n 'common.checkingPermissions': 'Berechtigungen werden überprüft…',\n 'common.unauthorizedTo': 'Nicht autorisiert für {{action}}',\n 'common.performThisAction': 'diese Aktion ausführen',\n 'common.unableToCreatePermissionPolicies':\n 'Berechtigungsrichtlinien können nicht erstellt werden.',\n 'common.unableToDeletePermissionPolicies':\n 'Berechtigungsrichtlinien können nicht gelöscht werden.',\n 'common.unableToRemoveConditions':\n 'Bedingungen können nicht von der Rolle entfernt werden.',\n 'common.unableToUpdateConditions':\n 'Bedingungen können nicht aktualisiert werden.',\n 'common.unableToAddConditions':\n 'Bedingungen können nicht zur Rolle hinzugefügt werden.',\n 'common.roleActionSuccessfully':\n 'Rolle {{roleName}} {{action}} erfolgreich',\n 'common.unableToFetchRole': 'Rolle kann nicht abgerufen werden: {{error}}',\n 'common.unableToFetchMembers':\n 'Mitglieder können nicht abgerufen werden: {{error}}',\n 'common.roleAction': '{{action}} Rolle',\n 'common.membersCount': '{{count}} Mitglieder',\n 'common.parentGroupCount': '{{count}} übergeordnete Gruppe',\n 'common.childGroupsCount': '{{count}} untergeordnete Gruppen',\n 'common.searchAndSelectUsersGroups':\n 'Suchen und wählen Sie Benutzer und Gruppen aus, die hinzugefügt werden sollen. Ausgewählte Benutzer und Gruppen werden in der Tabelle unten angezeigt.',\n 'common.noUsersAndGroupsFound': 'Keine Benutzer und Gruppen gefunden.',\n 'common.errorFetchingUserGroups':\n 'Fehler beim Abrufen von Benutzern und Gruppen: {{error}}',\n 'common.nameRequired': 'Name ist erforderlich',\n 'common.noMemberSelected': 'Kein Mitglied ausgewählt',\n 'common.noPluginSelected': 'Kein Plugin ausgewählt',\n 'common.pluginRequired': 'Plugin ist erforderlich',\n 'common.permissionRequired': 'Berechtigung ist erforderlich',\n 'common.editCell': 'Bearbeiten...',\n 'common.selectCell': 'Auswählen...',\n 'common.expandRow': 'Zeile erweitern',\n 'common.configureAccessFor': 'Zugriff konfigurieren für',\n 'common.defaultResourceTypeVisible':\n 'Standardmäßig ist der ausgewählte Ressourcentyp für alle hinzugefügten Benutzer sichtbar. Wenn Sie den Zugriff einschränken oder Berechtigungen für bestimmte Plugin-Regeln gewähren möchten, wählen Sie diese aus und fügen Sie die Parameter hinzu.',\n 'conditionalAccess.condition': 'Bedingung',\n 'conditionalAccess.allOf': 'AllOf',\n 'conditionalAccess.anyOf': 'AnyOf',\n 'conditionalAccess.not': 'Not',\n 'conditionalAccess.addNestedCondition':\n 'Verschachtelte Bedingung hinzufügen',\n 'conditionalAccess.addRule': 'Regel hinzufügen',\n 'conditionalAccess.nestedConditionTooltip':\n 'Verschachtelte Bedingungen sind **1-Layer-Regeln innerhalb einer Hauptbedingung**. Sie ermöglichen es Ihnen, angemessenen Zugriff zu gewähren, indem Sie detaillierte Berechtigungen basierend auf verschiedenen Bedingungen verwenden. Sie können mehrere verschachtelte Bedingungen hinzufügen.',\n 'conditionalAccess.nestedConditionExample':\n 'Sie können beispielsweise Zugriff auf alle Entitätstypen in der Hauptbedingung gewähren und eine verschachtelte Bedingung verwenden, um den Zugriff auf Entitäten zu beschränken, die dem Benutzer gehören.',\n 'dialog.cancelRoleCreation': 'Rollenerstellung abbrechen',\n 'dialog.exitRoleCreation': 'Rollenerstellung beenden?',\n 'dialog.exitRoleEditing': 'Rollenbearbeitung beenden?',\n 'dialog.exitWarning':\n '\\n\\nDas Verlassen dieser Seite verwirft dauerhaft die von Ihnen eingegebenen Informationen.\\n\\nMöchten Sie wirklich beenden?',\n 'dialog.discard': 'Verwerfen',\n 'dialog.cancel': 'Abbrechen',\n 'permissionPolicies.helperText':\n 'Standardmäßig erhalten Benutzer keinen Zugriff auf Plugins. Um Benutzerzugriff zu gewähren, wählen Sie die Plugins aus, die Sie aktivieren möchten. Wählen Sie dann aus, welche Aktionen Sie dem Benutzer erlauben möchten.',\n 'permissionPolicies.allPlugins': 'Alle Plugins ({{count}})',\n 'permissionPolicies.errorFetchingPolicies':\n 'Fehler beim Abrufen der Berechtigungsrichtlinien: {{error}}',\n 'permissionPolicies.resourceTypeTooltip': 'Ressourcentyp: {{resourceType}}',\n 'permissionPolicies.advancedPermissionsTooltip':\n 'Verwenden Sie erweiterte angepasste Berechtigungen, um Zugriff auf bestimmte Teile des ausgewählten Ressourcentyps zu gewähren.',\n 'permissionPolicies.pluginsSelected': '{{count}} Plugins',\n 'permissionPolicies.noPluginsSelected': 'Keine Plugins ausgewählt',\n 'permissionPolicies.search': 'Suchen',\n 'permissionPolicies.noRecordsToDisplay': 'Keine Datensätze anzuzeigen.',\n 'permissionPolicies.selectedPluginsAppearHere':\n 'Ausgewählte Plugins erscheinen hier.',\n 'permissionPolicies.selectPlugins': 'Plugins auswählen',\n 'permissionPolicies.noPluginsFound': 'Keine Plugins gefunden.',\n 'permissionPolicies.plugin': 'Plugin',\n 'permissionPolicies.permission': 'Berechtigung',\n 'permissionPolicies.policies': 'Richtlinien',\n 'permissionPolicies.conditional': 'Bedingt',\n 'permissionPolicies.rules': 'Regeln',\n 'permissionPolicies.rule': 'Regel',\n 'permissionPolicies.permissionPolicies': 'Berechtigungsrichtlinien',\n 'permissionPolicies.permissions': 'Berechtigungen',\n },\n});\n\nexport default rbacTranslationDe;\n"],"names":[],"mappings":"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"}
|