/* eslint-disable */ // @ts-nocheck import type { ManagementPermissionReference } from "@keycloak/keycloak-admin-client/lib/defs/managementPermissionReference"; import { HelpItem, useEnvironment, useFetch, } from "../../../shared/keycloak-ui-shared"; import { Card, CardBody, CardTitle, Form, FormGroup, PageSection, Switch, } from "../../../shared/@patternfly/react-core"; import { ActionsColumn, Table, Tbody, Td, Th, Thead, Tr, } from "../../../shared/@patternfly/react-table"; import { useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { Link, useNavigate } from "react-router-dom"; import { useAdminClient } from "../../admin-client"; import { toPermissionDetails } from "../../clients/routes/PermissionDetails"; import { KeycloakSpinner } from "../../../shared/keycloak-ui-shared"; import { useRealm } from "../../context/realm-context/RealmContext"; import type { Environment } from "../../environment-types"; import useLocaleSort from "../../utils/useLocaleSort"; import { useConfirmDialog } from "../confirm-dialog/ConfirmDialog"; import "./permissions-tab.css"; type PermissionScreenType = | "clients" | "users" | "groups" | "roles" | "identityProviders"; type PermissionsTabProps = { id?: string; type: PermissionScreenType; }; export const PermissionsTab = ({ id, type }: PermissionsTabProps) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const navigate = useNavigate(); const { realm } = useRealm(); const { environment } = useEnvironment(); const realmManagementClientId = realm === environment.masterRealm ? `${environment.masterRealm}-realm` : "realm-management"; const [realmId, setRealmId] = useState(""); const [permission, setPermission] = useState(); const localeSort = useLocaleSort(); const togglePermissionEnabled = (enabled: boolean) => { switch (type) { case "clients": return adminClient.clients.updateFineGrainPermission( { id: id! }, { enabled }, ); case "users": return adminClient.realms.updateUsersManagementPermissions({ realm, enabled, }); case "groups": return adminClient.groups.updatePermission({ id: id! }, { enabled }); case "roles": return adminClient.roles.updatePermission({ id: id! }, { enabled }); case "identityProviders": return adminClient.identityProviders.updatePermission( { alias: id! }, { enabled }, ); } }; useFetch( () => Promise.all([ adminClient.clients.find({ search: true, clientId: realmManagementClientId, }), (() => { switch (type) { case "clients": return adminClient.clients.listFineGrainPermissions({ id: id! }); case "users": return adminClient.realms.getUsersManagementPermissions({ realm, }); case "groups": return adminClient.groups.listPermissions({ id: id! }); case "roles": return adminClient.roles.listPermissions({ id: id! }); case "identityProviders": return adminClient.identityProviders.listPermissions({ alias: id!, }); } })(), ]), ([clients, permission]) => { setRealmId(clients[0]?.id!); setPermission(permission); }, [id, realm, realmManagementClientId, type], ); const [toggleDisableDialog, DisableConfirm] = useConfirmDialog({ titleKey: "permissionsDisable", messageKey: "permissionsDisableConfirm", continueButtonLabel: "confirm", onConfirm: async () => { const permission = await togglePermissionEnabled(false); setPermission(permission); }, }); if (!permission) { return ; } return ( {t("permissions")} {t(`${type}PermissionsHint`)}
} > { if (enabled) { const permission = await togglePermissionEnabled(enabled); setPermission(permission); } else { toggleDisableDialog(); } }} aria-label={t("permissionsEnabled")} />
{permission.enabled && ( <> {t("permissionsList")} {" "} {{ realm: realmManagementClientId }}. {localeSort( Object.entries(permission.scopePermissions || {}), ([name]) => name, ).map(([name, id]) => ( ))}
{t("permissionsScopeName")} {t("description")}
{name} {t(`scopePermissions.${type}.${name}-description`)}
)}
); };