Project activity #29451
openProject activity #28068: Rollen maken voor Tezza | O.b.v. de huidige 4 Alfresco-rollen, omwille dat klanten het beter kunnen beheren
Project activity #28339: Nieuwe autorisatieprofielen maken voor Tezza
Tezza configuratie services applicatie
71%
Description
Tijdens het overleg rondom Autorisatieprofielen en de implementatie ervan kwam het idee naar voren dit in een eigen (SpringBoot) applicatie onder te brengen.
Voordelen hiervan:- Configuratie wordt niet langer opgeslagen in Alfresco, wat het deployen van nieuwe configuraties gemakkelijker maakt (bijv. bij Amsterdam).
- Configuratie wordt losgekoppeld van Alfresco; geen dataLists voor het maken van autorisatie profielen.
- Vanuit een UI kan een profiel worden opgesteld volgens de opgezette voorwaarden. Deze wordt als JSON naar de service gestuurd.
- De service slaat de configuratie op. MongoDB is een noSQL, non-relationele database die makkelijk met ongestructureerde JSON werkt. Via SpringBoot data is hier makkelijk mee te communiceren
- Omdat de database non-relationeel is wordt er moeilijk een relatie gelegd tussen verschillende modellen. Het zal mogelijk zijn profielen op te halen met de bijbehorende gebruikers, maar niet om van 1 gebruiker alle profielen waar zij lid van zijn.
- Als de configuratie is opgeslagen doet de service middels API calls naar Alfresco de nodigde bewerkingen (Toevoegen van gebruikers aan groepen, groepen toekennen aan zaaktype/objecttype sites
Het idee van @Tahir Malik is dat in deze applicatie later ook (bijvoorbeeld) de .json extensions in opgeslagen kunnen worden.
Updated by Bram Geerlings 7 months ago
· Edited
Na overleg met @Tahir Malik en @Diego Mirandola
Huidige uitgangspunt is als volgt:
Vanuit de front-end worden profielen in elkaar gezet vanuit een UI waarin het mogelijk is om:- Profielnaam in te vullen
- Rol te selecteren (SiteConsumer, SiteManager etc.)
- Sites te selecteren (multi-select, indivudeel, all)
- Gebruikers te selecteren (multi-select, individueel, all)
Profielen kunnen worden opgeslagen in een springboot applicatie via een API-call /save, en ook worden opgehaald/bewerkt.
Onderstaand een voorbeeld van een mogelijk JSON schema voor een lijst authorisatie profielen:
{
"version": "<someVersion>",
"id": "<someGeneratedId>",
"AuthorisatieProfielen": [
{
"profielNaam": "Test Profiel",
"users": [
"gorden"
],
"rolName": "SiteConsumer",
"zaaktypen": [
"ZTMeldingOpenbareRuimte"
],
"objecttypen": []
}
]
}
Opgeslagen profielen kunnen worden gepubliceerd. Dit gaat via een aparte API call /publish. Deze call verzamelt de te publiceren profielen (bijvoorbeeld op basis van een lijst van IDs die is meegegeven vanuit de UI) en doet een call naar Alfresco om in bulk te bewerken. Foutmeldingen worden per call teruggeven naar de UI.
Updated by Bram Geerlings 5 months ago
- Status changed from New to In Progress
Requirements zoals overlegd met Tahir:
- Mongo vervangen door Postgresql --> Bram & Roel
- Alfresco authenticatie gebruiken bij de Spring-boot app --> Bram & Rick
- Publicatie pusht groepen naar Keycloack als ze niet bestaan en zet de juiste gebruikers in de rollen in Keycloak --> Bram & Erik
- Dit geldt alleen voor GZAC/Camunda klanten. Er moet een setting zijn waar je wel/niet koppelt met Keycloak
- Initialisatie script met de default rollen opstellen als een setup --> Maaike & Diego
- Goede visuele beschrijving maken in de App wat de rollen Tezza Beheer, Gemeente, Postintake doen --> Maaike
Updated by Bram Geerlings 5 months ago
- Groepen aanmaken in Keycloack via de real-import json --> Erik
- Backend AP aanpassen dat hij ROLES aanmaakt in Keycloack --> Bram
- Backend inloggen met Keycloack JWT Token die je vanuit de Frontend mee krijgt --> Erik
- Onderzoeken naar link tussen profiel & Zaaktype --> Bram
Updated by Bram Geerlings 5 months ago
Zoals besproken met Tahir en Diego:
Keycloak wordt optioneel, eigenlijk alleen te gebruiken wanneer GZAC ook wordt gebruikt.
De applicatie slaat groep, rol, gebruikers en sites lokaal op. Front-end kan de api bevragen om de autorisatiegroepen van een gebruiker op te vragen bij inloggen.
De applicatie schrijft groep, rol en gebruikers ook weg naar Keycloak voor gebruik in GZAC.
Frontend is verantwoordelijk voor het ophalen van de autorisatie profielen en site memberships en hier een diff in te laten zien wanneer gebruikers lid zijn van een site maar dit lidmaatschap niet uit een profiel halen.
Updated by Bram Geerlings 5 months ago
- Assignee changed from Bram Geerlings to Erik Hoogland
- Publish aanpassen:
- Get site users
- Filter users met gelijke rechten, deze hoeven niet te worden weggeschreven
- Post request voor users nog niet toegekend aan de site
- Put request voor users met rechten anders dan die nu op de site staan
- Get site users
- Put controller voor autorisatie profielen die worden bijgewerkt
- Ook bijwerken in keycloak als dit nodig is
- Alfresco/Keycloak token authenticatie
Updated by Bram Geerlings 5 months ago
https://git.contezza.nl/develop/alfresco/contezza-configuratie-services
Main branch bevat de laatste versie.
Hier in is het volgende nog extra toegevoegd:
Bij het publiceren van profielen worden de site memberships opgehaald en gefilterd:
Komt er een gebruiker niet voor in de sitememberships dan wordt deze toegevoegd aan een POST lijst.
Komt er een gebruiker voor in de sitemememberships maar met een rol anders dan in de autorisatieprofielen dan wordt deze toegevoegd aan een PUT lijst.
De POST lijst wordt gebruikt in een bulk call naar site/{siteId}/memberships met daarin alle userIds en rollen.
De PUT lijst wordt gebruikt om per gebruiker een call naar site/{siteId}/members/{userId} te doen met daarin de nieuwe rol.
DELETE is lastiger:
Als gebruikers niet in de autorisatieprofielen voorkomen maar wel op de sites kunnen we er niet vanuit gaan dat ze verwijderd moeten worden omdat iemand ze met de hand kan hebben toegevoegd.
Er moet een diff bestaan tussen bestaande profielen en te publiceren profielen om te zien we er verwijderd zijn uit een bestaand profiel en dus van een site moeten worden verwijderd.
Updated by Erik Hoogland 5 months ago
- Target version changed from Contezza Development Backlog to Tezza 2024.12
Updated by Erik Hoogland 4 months ago
- Authentication & Authorization via de Alfresco Auth API
- Via ticket volledig, via bearer nog deels, zie subticket
- DevTools
- Build en start docker
- Aanmaken rollen in Keycloak ipv groepen
- Bug fixes AlfrescoApiService
Updated by Erik Hoogland 4 months ago
· Edited
- Status changed from In Progress to Feedback
- Target version changed from Tezza 2024.12 to Contezza Development 2025.01
Samenvatting van de features:
Het project kan nu als lokale app of als docker container worden gestart, beide met een postgres database in een docker container.
Als lokale app ondersteund het Spring boot DevTools for live reloading. Er is nog geen mogelijkheid om een image voor Harbor te maken.
Het kan starten zonder alfresco of keycloak, maar heeft minstens een Alfresco installatie nodig om calls te kunnen authenticeren en uitvoeren. Een keycloak is nodig als er via een bearer token wordt gewerkt en de property 'settings.keycloak.enabled' op true staat.
Voor meer details over security, zie https://support.contezza.nl/issues/30129#note-2
De volgende calls zijn nu beschikbaar:- POST, "/api/configuration/authorisation/profile"
- Creëert een nieuw profiel in de database
- Als Keycloak aan staat, maat het ook een rol aan in Keycloak met de gebruikers uit het request
- PUT, "/api/configuration/authorisation/profile/{id}"
- Update een bestaand profiel in de database
- Doet geen aanpassingen in Keycloak
- DELETE, "/api/configuration/authorisation/profile/{id}"
- Verwijderd een bestaand profiel uit de database
- Als Keycloak aan staat, Verwijdert het ook de rol in Keycloak
- GET, "/api/configuration/authorisation/profile"
- Haalt alle profielen op
- GET, "/api/configuration/authorisation/profile/{id}"
- Haalt één profiel op, op basis van het id
- GET, "/api/configuration/authorisation/profile/users/{userName}"
- Zoekt voor een gebruikersnaam alle profielen aan welke deze is toegevoegd
- POST, "/api/configuration/authorisation/profile/publish"
- Dit verwerkt het profiel in Alfresco en keycloak
- Gebruikers die nog niet aan een site in Alfresco zijn toegevoegd, worden hieraan toegevoegd met de juist rol;
- Gebruikers die in Alfresco een andere rol hebben dan volgens het profiel, worden bijgewerkt.
- Gebruikers die in Alfresco op een site staan, maar met geen enkele rol in een profiel staan voor die site, worden verwijderd van de site
- Als Keycloak aanstaat, worden gebruikers ook gesynchroniseerd met de keycloak rol, waarbij het profiel leidend is
Updated by Erik Hoogland 4 months ago
- Assignee changed from Erik Hoogland to Bram Geerlings
@Bram Geerlings kan jij dit reviewen?
@Maaike Bommerson De request in de Team Workspace van Postman zijn ook bijgewerkt
Updated by Tahir Malik 4 months ago
- Target version changed from Contezza Development 2025.01 to Tezza 2025.01
Updated by Erik Hoogland 4 months ago
Extra informatie: Als dit project wordt gebruikt met tezza-workspace als backend lokaal:
Voor gebruik zonder keycloak moeten de taken 'platform' en 'share' worden gestart.
Voor gebruik met keycloak moeten de taken 'start-docker-platform' en 'start-docker-share' worden gestart
Updated by Bram Geerlings 4 months ago
- Target version changed from Tezza 2025.01 to Contezza Development 2025.01
Reviewed en merge naar main gedaan
Updated by Erik Hoogland 4 months ago
URL's zijn aangepast naar /api/configuration/authorisation/profile als base
Updated by Tahir Malik 3 months ago
- Target version changed from Contezza Development 2025.01 to Tezza 2025.02