30 lines
1.4 KiB
TypeScript
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));
|
|
}
|