hardcoded version working
This commit is contained in:
parent
37ad6bd14a
commit
da45bf0e09
3 changed files with 70 additions and 67 deletions
|
@ -79,7 +79,20 @@ export const AddRoleMappingModal = ({
|
||||||
client: client.id!,
|
client: client.id!,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// MF 052021 TODOs:
|
||||||
|
// change if/elses to switches
|
||||||
|
// add a type for user-federation that pulls in all roles
|
||||||
|
// make id optional
|
||||||
|
|
||||||
|
// adminClient.roles.find
|
||||||
|
|
||||||
|
// roles = await adminClient.clients.listRoles(
|
||||||
|
// {
|
||||||
|
//
|
||||||
|
// id: client.id!
|
||||||
|
// }
|
||||||
|
|
||||||
return {
|
return {
|
||||||
roles,
|
roles,
|
||||||
client,
|
client,
|
||||||
|
|
|
@ -1,83 +1,60 @@
|
||||||
import { AlertVariant, Button, FormGroup, TextInput } from "@patternfly/react-core";
|
import { Button, FormGroup, TextInput } from "@patternfly/react-core";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { HelpItem } from "../../../components/help-enabler/HelpItem";
|
import { HelpItem } from "../../../components/help-enabler/HelpItem";
|
||||||
import type { UseFormMethods } from "react-hook-form";
|
import type { UseFormMethods } from "react-hook-form";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { useAdminClient } from "../../../context/auth/AdminClient";
|
import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
|
||||||
import { useAlerts } from "../../../components/alert/Alerts";
|
import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
|
||||||
import { RoleMappingPayload } from "keycloak-admin/lib/defs/roleRepresentation";
|
import { AddRoleMappingModal } from "../../../components/role-mapping/AddRoleMappingModal";
|
||||||
|
import "../../user-federation.css";
|
||||||
|
|
||||||
import { AddRoleMappingModal, MappingType } from "../../../components/role-mapping/AddRoleMappingModal";
|
|
||||||
|
|
||||||
export type LdapMapperHardcodedLdapRoleProps = {
|
export type LdapMapperHardcodedLdapRoleProps = {
|
||||||
form: UseFormMethods;
|
form: UseFormMethods;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type CompositeRole = RoleRepresentation & {
|
||||||
|
parent: RoleRepresentation;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Row = {
|
||||||
|
client?: ClientRepresentation;
|
||||||
|
role: CompositeRole | RoleRepresentation;
|
||||||
|
};
|
||||||
|
|
||||||
export const LdapMapperHardcodedLdapRole = ({
|
export const LdapMapperHardcodedLdapRole = ({
|
||||||
form,
|
form,
|
||||||
}: LdapMapperHardcodedLdapRoleProps) => {
|
}: LdapMapperHardcodedLdapRoleProps) => {
|
||||||
const { t } = useTranslation("user-federation");
|
const { t } = useTranslation("user-federation");
|
||||||
const helpText = useTranslation("user-federation-help").t;
|
const helpText = useTranslation("user-federation-help").t;
|
||||||
|
|
||||||
const adminClient = useAdminClient();
|
|
||||||
|
|
||||||
const [showAssign, setShowAssign] = useState(false);
|
const [showAssign, setShowAssign] = useState(false);
|
||||||
|
|
||||||
const { addAlert } = useAlerts();
|
const selectRoles = async (rows: Row[]) => {
|
||||||
|
if (rows[0].client) {
|
||||||
|
form.setValue(
|
||||||
const assignRoles = async (rows: Row[]) => {
|
"config.role[0]",
|
||||||
try {
|
`${rows[0].client.clientId}.${rows[0].role.name}`
|
||||||
const realmRoles = rows
|
|
||||||
.filter((row) => row.client === undefined)
|
|
||||||
.map((row) => row.role as RoleMappingPayload)
|
|
||||||
.flat();
|
|
||||||
await adminClient.clientScopes.addRealmScopeMappings(
|
|
||||||
{
|
|
||||||
id,
|
|
||||||
},
|
|
||||||
realmRoles
|
|
||||||
);
|
|
||||||
await Promise.all(
|
|
||||||
rows
|
|
||||||
.filter((row) => row.client !== undefined)
|
|
||||||
.map((row) =>
|
|
||||||
adminClient.clientScopes.addClientScopeMappings(
|
|
||||||
{
|
|
||||||
id,
|
|
||||||
client: row.client!.id!,
|
|
||||||
},
|
|
||||||
[row.role as RoleMappingPayload]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
addAlert(t("roleMappingUpdatedSuccess"), AlertVariant.success);
|
|
||||||
} catch (error) {
|
|
||||||
addAlert(
|
|
||||||
t("roleMappingUpdatedError", {
|
|
||||||
error: error.response?.data?.errorMessage || error,
|
|
||||||
}),
|
|
||||||
AlertVariant.danger
|
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
form.setValue("config.role[0]", `${rows[0].role.name}`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{showAssign && (
|
{showAssign && (
|
||||||
// MF 042921 hardcoded for now, to see modal displayed
|
// MF 042921 hardcoded for now, to see modal displayed
|
||||||
<AddRoleMappingModal
|
<AddRoleMappingModal
|
||||||
id="e2d7fe7c-f7bc-4903-9562-3d079ae8667c"
|
id="1a85c63a-99bd-4d16-9924-b38b8f7cceaf" // this is the ID for client-scopes > marks-client-scope
|
||||||
type="client-scope"
|
type="client-scope"
|
||||||
name="name"
|
name="name"
|
||||||
// id={id}
|
// id={id}
|
||||||
// type={type}
|
// type={type}
|
||||||
// name={name}
|
// name={name}
|
||||||
onAssign={assignRoles}
|
onAssign={selectRoles}
|
||||||
onClose={() => setShowAssign(false)}
|
onClose={() => setShowAssign(false)}
|
||||||
/>)}
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
<FormGroup
|
<FormGroup
|
||||||
label={t("common:role")}
|
label={t("common:role")}
|
||||||
|
@ -91,20 +68,23 @@ export const LdapMapperHardcodedLdapRole = ({
|
||||||
fieldId="kc-role"
|
fieldId="kc-role"
|
||||||
isRequired
|
isRequired
|
||||||
>
|
>
|
||||||
<TextInput
|
<div className="keycloak__user-federation__assign-role">
|
||||||
isRequired
|
<TextInput
|
||||||
type="text"
|
isRequired
|
||||||
id="kc-role"
|
type="text"
|
||||||
data-testid="role"
|
id="kc-role"
|
||||||
name="config.role[0]"
|
data-testid="role"
|
||||||
ref={form.register}
|
name="config.role[0]"
|
||||||
/>
|
ref={form.register}
|
||||||
<Button
|
/>
|
||||||
data-testid="assignRole"
|
<Button
|
||||||
onClick={() => setShowAssign(true)}
|
className="keycloak__user-federation__assign-role-btn"
|
||||||
>
|
data-testid="selectRole"
|
||||||
{t("assignRole")}
|
onClick={() => setShowAssign(true)}
|
||||||
</Button>
|
>
|
||||||
|
{t("selectRole")}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
@ -9,3 +9,13 @@
|
||||||
.error {
|
.error {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.keycloak__user-federation__assign-role {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.keycloak__user-federation__assign-role-btn {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
Loading…
Reference in a new issue