Project activity #29451
closedProject 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
100%
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.
Files
Updated by Bram Geerlings about 1 year ago
- Status changed from Backlog to Closed
Updated by Bram Geerlings about 1 year 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 11 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 11 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 11 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 10 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 10 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 10 months ago
- Target version changed from Contezza Development Backlog to Tezza 2024.12
Updated by Erik Hoogland 10 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 10 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 10 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 10 months ago
- Target version changed from Contezza Development 2025.01 to Tezza 2025.01
Updated by Erik Hoogland 10 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 10 months ago
- Target version changed from Tezza 2025.01 to Contezza Development 2025.01
Reviewed en merge naar main gedaan
Updated by Erik Hoogland 10 months ago
URL's zijn aangepast naar /api/configuration/authorisation/profile als base
Updated by Tahir Malik 9 months ago
- Target version changed from Contezza Development 2025.01 to Tezza 2025.02
Updated by Olav Allema 5 months ago
- Target version changed from Tezza 2025.02 to Tezza 2025.05
Updated by Tahir Malik 5 months ago
Kan deze hoofdticket dicht of zal ik deze ticket weghalen van de Roadmap?
Hoe zorgen we dan dat dit wel prio heeft om af te maken en te releasen?
Updated by Bram Geerlings 4 months ago
- Target version changed from Tezza 2025.05 to Contezza Development 2025.06
Updated by Tahir Malik 4 months ago
- Status changed from Feedback to In Progress
Updated by Tahir Malik 3 months ago
- Target version changed from Contezza Development 2025.06 to Contezza Development 2025.08
Updated by Tahir Malik 2 months ago
- Async call getriggerd vanuit Frontent bij openen pagina
- Backend doet een check op alle profielen
- Voor de default profielen wijzigingen worden direct doorgevoerd in de DB
- Voor de custom profielen worden wijzigingen niet direct doorgevoerd maar teruggeven in de JSON response
- In de Frontend UI wil ik per profiel zien of deze
- In Sync is --> groen
- Wijziging doorgevoerd in default profiel --> Oranje/geel
- Wijziging kan niet doorgevoerd worden --> rood
- Mogelijkheid bij een niet doorgevoerd wijziging om die gebruiker(s) toe te voegen aan een bestaande profiel --> onderzoeken
- In de lijst wil ik per profiel kunnen inzien of deze wel/niet gepubliceerd is, nu is dat onderscheid niet te maken
Updated by Bram Geerlings 2 months ago
Uitwerking punten in overleg Diego:
- Er komt een extra kolom die aangeeft of een profiel PUBLSIHED of niet PUBLISHED is.
- Publish API gaat een dry-run variant ondersteunen
- Huidige publish call gaat in twee stappen, preview en publish. Preview geeft het resultaat van de dryrun terug. Publish verwerkt de lijst van acties. De Info statements worden niet langer relevant bij dryrun of publish.
- Bij het laden van de tabel wordt per published profiel de dry-run/publish call gedaan. Resultaat is een lijst van acties (CUD/Skip). Als deze lijst CUD statements bevat is het profiel niet in sync (oranje). Functioneel Beheer kan er voor kiezen om de CUD statements uit te voeren (hier moet een force sync API voor komen). Als de lijst leeg is komt er een groen vinkje, als er een lijst met skip statements is komt er een groen 'info' symbooltje. Deze codering komt in een kolom 'healthcheck' (of iets dergelijks). Door te klikken op de warning/info krijgt FB inzage in de CUD/Skip acties. Alleen bij warnings is de force sync action beschikbaar in de dialog.
- Er wordt async call gedaan naar de backend om de 'info' results op te halen (dit zijn gebruikers op een site die niet zijn toegekend aan een profiel). Info wordt uitgebreid met objecten voor userId, siteId etc. Deze informatie wordt getoond op de plek van het 'profielen valideren' knopje. De async call wordt automatisch uitgevoerd bij het laden van de pagina. Het knopje geeft aan als er data beschikbaar is.
- Te bespreken wat we hier mee willen:
- Knopje dat de new profile dialog opent met vooringevuld: User, rol, Site zodat het makkelijk is een nieuw profiel aan te maken
- EERST OVERLEGGEN Mogelijkheid gebruikers toe te kennen aan bestaande profielen (te kiezen uit de lijst van profielen met dezelfde rol). -> Opent profiel bewerken dialog met User/Site toegevoegd. Willen we de lijst van profielen nog verder ordenenen (Zelfde site? Zelfde gebruiker etc.) Groeperen we de info meldingen obv gebruiker? Rol? Site?
- Te bespreken wat we hier mee willen:
Updated by Diego Mirandola 2 months ago
De volgende docker variable moet toegevoegd worden:
CONTEZZA_AUTHORIZATION_MANAGEMENT_SERVICE_PROXY_URL=https://dev-tezza.contezza.cloud/authorization-management-service/
Updated by Bram Geerlings about 2 months ago
Op dev-tezza gebruikte Keycloak H2 interne database. Dit is aangepast.
Updated by Bram Geerlings about 2 months ago
· Edited
Bevindingen na test:
- Protected profiles zijn niet meer protected na bewerking.
- TEZZA_BEHEER moet als laatste worden gebootstrapped om de rol goed te zetten.
- Bestaande gebruikers op Tezza beheer site moeten bij startup worden opgehaald/weggeschreven naar bijbehorende profielen (TEZZA_BEHEER, TEZZA_GEMEENTE, TEZZA_POSTINTAKE).
- Profielen gerelateerd aan Tezza Beheer site worden wel in keycloak bijgewerkt maar niet in Alfresco
- Delete action wordt niet uitgevoerd in keycloak
- Bij DeleteAction staat moet fromRole gevuld worden met wat in Role staat.
- Rol omschrijving mist in Info validate response
- Ondersteuning voor wildcard 'Alle Zaaktype Sites', 'Alle Objecttype Sites' mist nu. Voorstel payload (besproken met Diego):
"sites": [ { "id": "*", "siteType": "zaak", "displayName": "[Maakt niet uit]" } ]
Updated by Tahir Malik about 2 months ago
- Bootstrap
- Nieuwe profiel aanmaken & publish
- Diff wijziging doorvoeren/validatie
- Profiel wijzigen & publish
- Profiel verwijderen & publish
Updated by Diego Mirandola about 1 month ago
De eerste versie van de app (inclusief alle subtickets) is meegenomen in contezza-apps versie 4.2.2.