Fix scouthub-home-be
This commit is contained in:
@@ -1,20 +1,29 @@
|
||||
import { keycloakAdminHttp } from './httpClient';
|
||||
|
||||
interface RealmRoleRepresentation {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
// Ruoli assegnati automaticamente da Keycloak a ogni utente (non gestiti da
|
||||
// questa app): il composite "default-roles-{realm}" e i ruoli che include.
|
||||
const RUOLI_DEFAULT_KEYCLOAK = new Set(['offline_access', 'uma_authorization']);
|
||||
|
||||
function isRuoloDefaultKeycloak(nome: string): boolean {
|
||||
return RUOLI_DEFAULT_KEYCLOAK.has(nome) || nome.startsWith('default-roles-');
|
||||
}
|
||||
|
||||
export async function assignRealmRoleToUser(userId: string, ruolo: string): Promise<void> {
|
||||
// TODO: POST {adminBaseUrl}/users/{userId}/role-mappings/realm con il
|
||||
// rappresentante del ruolo (richiede prima GET {adminBaseUrl}/roles/{ruolo}
|
||||
// per ottenerne id e name).
|
||||
throw new Error('Not implemented');
|
||||
const { data: ruoloRepresentation } = await keycloakAdminHttp.get<RealmRoleRepresentation>(`/roles/${ruolo}`);
|
||||
await keycloakAdminHttp.post(`/users/${userId}/role-mappings/realm`, [ruoloRepresentation]);
|
||||
}
|
||||
|
||||
export async function removeRealmRoleFromUser(userId: string, ruolo: string): Promise<void> {
|
||||
// TODO: DELETE {adminBaseUrl}/users/{userId}/role-mappings/realm con il
|
||||
// rappresentante del ruolo.
|
||||
throw new Error('Not implemented');
|
||||
const { data: ruoloRepresentation } = await keycloakAdminHttp.get<RealmRoleRepresentation>(`/roles/${ruolo}`);
|
||||
await keycloakAdminHttp.delete(`/users/${userId}/role-mappings/realm`, { data: [ruoloRepresentation] });
|
||||
}
|
||||
|
||||
export async function getUserRealmRoles(userId: string): Promise<string[]> {
|
||||
// TODO: GET {adminBaseUrl}/users/{userId}/role-mappings/realm. Il contratto
|
||||
// di questa funzione è di restituire solo i ruoli scout "custom" (es. le
|
||||
// voci di ruoliDefault create in POST /gruppi), escludendo i ruoli di
|
||||
// default di Keycloak (offline_access, uma_authorization, ecc.).
|
||||
throw new Error('Not implemented');
|
||||
const response = await keycloakAdminHttp.get<RealmRoleRepresentation[]>(`/users/${userId}/role-mappings/realm`);
|
||||
return response.data.map((ruolo) => ruolo.name).filter((nome) => !isRuoloDefaultKeycloak(nome));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user