Files
scouthub/scouthub-home-be/src/keycloak-admin/roles.ts
T
2026-07-25 12:09:12 +02:00

30 lines
1.4 KiB
TypeScript

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> {
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> {
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[]> {
const response = await keycloakAdminHttp.get<RealmRoleRepresentation[]>(`/users/${userId}/role-mappings/realm`);
return response.data.map((ruolo) => ruolo.name).filter((nome) => !isRuoloDefaultKeycloak(nome));
}