Fix db, keyclaok .env.example e docker compose
This commit is contained in:
+14
-9
@@ -4,21 +4,26 @@ Realm `scouthub` con feature Organizations abilitata, importato automaticamente
|
||||
all'avvio di Keycloak (`--import-realm` nel `docker-compose.yml` alla radice).
|
||||
|
||||
Basato su `keycloak/realm.json` (bozza di riferimento), con l'aggiunta del
|
||||
ruolo `admin-centrale` richiesto da `POST /gruppi` in `scouthub-home-be`
|
||||
(placeholder temporaneo, vedi il TODO in `src/routes/gruppi.routes.ts`).
|
||||
ruolo `admin` richiesto da `POST /gruppi` e `GET /gruppi` in
|
||||
`scouthub-home-be`: creazione/elenco diretti restano riservati ad `admin`,
|
||||
mentre un utente normale passa dal flusso self-service di richiesta
|
||||
creazione gruppo (`POST /richieste-creazione-gruppo`), che alla review
|
||||
positiva invoca la stessa `createGruppo()` internamente.
|
||||
|
||||
Contiene già:
|
||||
|
||||
- i realm role usati dal backend: `admin-centrale`, `capo-gruppo`,
|
||||
`capo-unita`, `censito`, più il placeholder `manage-organizations`
|
||||
- i realm role usati dal backend, in gerarchia composite (`admin` include
|
||||
`capo-gruppo` include `capo-unita` include `capo` include `censito`; `admin`
|
||||
include anche `moderatore`): `admin`, `capo-gruppo`, `capo-unita`, `capo`,
|
||||
`censito`, `moderatore`, più il placeholder `manage-organizations`
|
||||
- il client scope `organization` (aggiunge id/attributi della Organization
|
||||
nei token OIDC)
|
||||
- il client confidential `scouthub-home-be` (service account abilitato,
|
||||
usato dal backend per il flow client-credentials verso le Admin REST API —
|
||||
il suo `clientId`/`secret` devono corrispondere a
|
||||
`KEYCLOAK_ORG_SERVICE_CLIENT_ID`/`_SECRET` in `scouthub-home-be/.env.example`)
|
||||
- il client pubblico `scouthub-frontend` (login utente, redirect su
|
||||
`http://localhost:4200/*`)
|
||||
- il client pubblico `scouthub-frontend` (login utente, condiviso da tutti i
|
||||
frontend Angular del progetto, redirect su `http://localhost:7000-7003/*`)
|
||||
|
||||
Passi manuali ancora da fare dopo l'import (non automatizzabili in un realm
|
||||
export senza conoscere gli id generati a runtime):
|
||||
@@ -49,15 +54,15 @@ I passaggi da fare sono:
|
||||
- manage-users
|
||||
- view-users
|
||||
9. Clicca Assign.
|
||||
10. Dopo fatto questo bisogna fare un user admin-centrale
|
||||
10. Dopo fatto questo bisogna fare un user admin
|
||||
|
||||
I passaggi da fare per admin-centrale:
|
||||
I passaggi da fare per admin:
|
||||
1. Apri http://localhost:8081/admin, login admin/admin, cambia realm in scouthub.
|
||||
2. Menu laterale → Users → clicca su movioletto@yahoo.it.
|
||||
3. Vai sul tab "Role mapping".
|
||||
4. Clicca "Assign role".
|
||||
5. Assicurati che il filtro sia su "Filter by realm roles" (dovrebbe esserlo di default per gli utenti normali).
|
||||
6. Cerca e seleziona admin-centrale.
|
||||
6. Cerca e seleziona admin.
|
||||
7. Clicca Assign.
|
||||
|
||||
⚠️ Il secret del client `scouthub-home-be` (`CAMBIA-QUESTO-SECRET-IN-UN-VAULT`)
|
||||
|
||||
@@ -11,11 +11,33 @@
|
||||
|
||||
"roles": {
|
||||
"realm": [
|
||||
{ "name": "admin-centrale", "description": "Placeholder temporaneo: crea nuovi gruppi scout (Organization). Vedi TODO in src/routes/gruppi.routes.ts" },
|
||||
{ "name": "capo-gruppo", "description": "Gestisce il proprio gruppo scout (Organization): membri, inviti, ruoli" },
|
||||
{ "name": "capo-unita", "description": "Gestisce attivita' e materiali della propria branca" },
|
||||
{
|
||||
"name": "admin",
|
||||
"description": "Puo' fare tutto su tutte le organizzazioni. Ex admin-centrale. Unico ruolo abilitato a POST/GET /gruppi diretti; gli utenti normali passano dal flusso self-service di richiesta creazione gruppo",
|
||||
"composite": true,
|
||||
"composites": { "realm": ["capo-gruppo", "moderatore"] }
|
||||
},
|
||||
{
|
||||
"name": "capo-gruppo",
|
||||
"description": "Gestisce il proprio gruppo scout (Organization): membri, inviti, ruoli",
|
||||
"composite": true,
|
||||
"composites": { "realm": ["capo-unita"] }
|
||||
},
|
||||
{
|
||||
"name": "capo-unita",
|
||||
"description": "Gestisce attivita' e materiali della propria unita' (branca)",
|
||||
"composite": true,
|
||||
"composites": { "realm": ["capo"] }
|
||||
},
|
||||
{
|
||||
"name": "capo",
|
||||
"description": "Vede e modifica parzialmente le cose della propria unita' (branca). Permessi identici a capo-unita per ora, da differenziare in futuro",
|
||||
"composite": true,
|
||||
"composites": { "realm": ["censito"] }
|
||||
},
|
||||
{ "name": "censito", "description": "Accesso in sola consultazione" },
|
||||
{ "name": "manage-organizations", "description": "Placeholder locale: il ruolo reale e' il client role manage-organizations su realm-management" }
|
||||
{ "name": "manage-organizations", "description": "Placeholder locale: il ruolo reale e' il client role manage-organizations su realm-management" },
|
||||
{ "name": "moderatore", "description": "Puo' approvare/rifiutare proposte da moderare nei vari servizi (es. catalogo materiali del magazzino, in futuro validazione attivita' prima della pubblicazione). Ex admin-catalogo" }
|
||||
]
|
||||
},
|
||||
|
||||
@@ -44,13 +66,22 @@
|
||||
"standardFlowEnabled": true,
|
||||
"directAccessGrantsEnabled": false,
|
||||
"redirectUris": [
|
||||
"http://localhost:4200/*",
|
||||
"http://localhost:4201/*"
|
||||
"http://localhost:7000/*",
|
||||
"http://localhost:7001/*",
|
||||
"http://localhost:7002/*",
|
||||
"http://localhost:7002/silent-check-sso.html",
|
||||
"http://localhost:7003/*",
|
||||
"http://localhost:7003/silent-check-sso.html"
|
||||
],
|
||||
"webOrigins": [
|
||||
"http://localhost:4200",
|
||||
"http://localhost:4201"
|
||||
"http://localhost:7000",
|
||||
"http://localhost:7001",
|
||||
"http://localhost:7002",
|
||||
"http://localhost:7003"
|
||||
],
|
||||
"attributes": {
|
||||
"post.logout.redirect.uris": "http://localhost:7000/*##http://localhost:7001/*##http://localhost:7002/*##http://localhost:7003/*"
|
||||
},
|
||||
"defaultClientScopes": [
|
||||
"openid",
|
||||
"basic",
|
||||
@@ -59,6 +90,38 @@
|
||||
"email",
|
||||
"organization"
|
||||
]
|
||||
},
|
||||
{
|
||||
"clientId": "scouthub-magazzino-be",
|
||||
"name": "Servizio di gestione catalogo magazzino (magazzino-be)",
|
||||
"enabled": true,
|
||||
"protocol": "openid-connect",
|
||||
"publicClient": false,
|
||||
"standardFlowEnabled": false,
|
||||
"directAccessGrantsEnabled": false,
|
||||
"serviceAccountsEnabled": true,
|
||||
"clientAuthenticatorType": "client-secret",
|
||||
"secret": "CAMBIA-QUESTO-SECRET-IN-UN-VAULT",
|
||||
"redirectUris": [],
|
||||
"attributes": {
|
||||
"note": "Usato solo server-to-server dal backend scouthub-magazzino-be verso le Admin REST API. Non esporre mai il secret al frontend."
|
||||
}
|
||||
},
|
||||
{
|
||||
"clientId": "scouthub-eventi-be",
|
||||
"name": "Servizio di gestione eventi (eventi-be)",
|
||||
"enabled": true,
|
||||
"protocol": "openid-connect",
|
||||
"publicClient": false,
|
||||
"standardFlowEnabled": false,
|
||||
"directAccessGrantsEnabled": false,
|
||||
"serviceAccountsEnabled": true,
|
||||
"clientAuthenticatorType": "client-secret",
|
||||
"secret": "CAMBIA-QUESTO-SECRET-IN-UN-VAULT",
|
||||
"redirectUris": [],
|
||||
"attributes": {
|
||||
"note": "Usato solo server-to-server dal backend scouthub-eventi-be verso le Admin REST API. Il secret va condiviso anche con attivita-be e magazzino-be, che lo usano come client credentials per chiamare POST /eventi/:id/risorse su scouthub-eventi-be. Non esporre mai il secret al frontend."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user