diff --git a/src/services/keycloak.ts b/src/services/keycloak.ts index a9c52bc..db7b4b5 100644 --- a/src/services/keycloak.ts +++ b/src/services/keycloak.ts @@ -187,6 +187,45 @@ export async function getRoles(name?: string) { }; } +/** + * Get roles list of user + * + * Client must have permission to get realms roles + * + * @returns role's info (array if not specify name) if success, null if not found, false otherwise. + */ +export async function getUserRoles(userId: string) { + const res = await fetch( + `${KC_URL}/admin/realms/${KC_REALM}/users/${userId}/role-mappings/realm`, + { + // prettier-ignore + headers: { + "authorization": `Bearer ${await getToken()}`, + }, + }, + ).catch((e) => console.log(e)); + + if (!res) return false; + if (!res.ok && res.status !== 404) { + return Boolean(console.error("Keycloak Error Response: ", await res.json())); + } + + if (res.status === 404) { + return null; + } + + const data = await res.json(); + + if (Array.isArray(data)) { + return data.map((v: Record) => ({ id: v.id, name: v.name })); + } + + return { + id: data.id, + name: data.name, + }; +} + /** * Assign role to user *