Project

General

Profile

Project activity #29451

closed

Project 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

Added by Bram Geerlings about 1 year ago. Updated 23 days ago.

Status:
Closed
Priority:
P4 Normal
Category:
-
Start date:
05/12/2024
Due date:
% Done:

100%

Estimated time:
(Total: 0.00 h)

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.
Het voorstel is een SpringBoot applicatie te maken als POC die het configureren van Autorisatieprofielen ondersteunt.
  • 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

clipboard-202508141612-e89ao.png (8.11 KB) clipboard-202508141612-e89ao.png Bram Geerlings, 14/08/2025 04:12 PM

Subtasks 15 (0 open15 closed)

Project activity #30129: Autorisatie rest api configuratie application via KeycloakResolvedBram Geerlings05/12/2024

Actions
Project activity #30509: Usergroups opnemen in profielResolvedErik Hoogland07/01/2025

Actions
Project activity #30549: AP: Queueing implementeren incl. error-queueRejectedContezza Development08/01/2025

Actions
Project activity #30551: AP: Toevoegen call ophalen profielen ingelogde gebruikerResolvedBram Geerlings08/01/2025

Actions
Project activity #30569: AP: Delete profiel en publish refactorResolvedBram Geerlings10/01/2025

Actions
Project activity #31012: AP: Foutieve publicatie loggen en tonen in de UIRejectedContezza Development24/02/2025

Actions
Project activity #31098: AP: Bootstrap users in dockerResolvedBram Geerlings03/03/2025

Actions
Project activity #33041: Autorisatieprofielen setup en bootstrapRejectedBram Geerlings25/07/2025

Actions
Project activity #34593: Admin-Tools: ik wil graag inzicht hebben van welke Sites met welke rol de gebruiker lid isResolvedDiego Mirandola21/08/2025

Actions
Project activity #34596: AP feature: Ik wil graag vanaf AP chips, Sites, Groups & Users een dialog met meer informatieResolvedDiego Mirandola21/08/2025

Actions
Project activity #34597: AP feature: Ik wil graag dat de sortering van de API altijd op profielnaam is i.p.v. modifieddateResolvedDiego Mirandola21/08/2025

Actions
Project activity #34608: Delete profile refactorResolvedDiego Mirandola22/08/2025

Actions
Project activity #34609: Preview actions uitbreiden/samenvoegen keycloak/alfrescoResolvedBram Geerlings22/08/2025

Actions
Project activity #34629: Keycloak sync - validate profile on startResolvedBram Geerlings25/08/2025

Actions
Project activity #34709: AP: Ik wil graag bij de validatie of een gebruiker lid gemaakt wordt van een bestaande profiel of een nieuwe profielResolvedDiego Mirandola04/09/2025

Actions
Actions #1

Updated by Bram Geerlings about 1 year ago

  • Status changed from Backlog to Closed
Actions #2

Updated by Bram Geerlings about 1 year ago

  • Status changed from Closed to New
Actions #3

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.

Actions #4

Updated by Olav Allema about 1 year ago

  • Assignee set to Bram Geerlings
Actions #5

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
Actions #6

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
Actions #7

Updated by Erik Hoogland 11 months ago

  • Subtask #30129 added
Actions #8

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.

Actions #9

Updated by Bram Geerlings 10 months ago

  • Assignee changed from Bram Geerlings to Erik Hoogland
To-do:
  • 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
  • Put controller voor autorisatie profielen die worden bijgewerkt
    • Ook bijwerken in keycloak als dit nodig is
  • Alfresco/Keycloak token authenticatie
Actions #10

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.

Actions #11

Updated by Erik Hoogland 10 months ago

  • Target version changed from Contezza Development Backlog to Tezza 2024.12
Actions #12

Updated by Erik Hoogland 10 months ago

De volgende punten zijn nu toegevoegd:
  • 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
Actions #13

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
Actions #14

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

Actions #15

Updated by Tahir Malik 10 months ago

  • Target version changed from Contezza Development 2025.01 to Tezza 2025.01
Actions #16

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

Actions #17

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

Actions #18

Updated by Erik Hoogland 10 months ago

URL's zijn aangepast naar /api/configuration/authorisation/profile als base

Actions #19

Updated by Bram Geerlings 10 months ago

  • Subtask #30509 added
Actions #20

Updated by Tahir Malik 10 months ago

  • Subtask #30549 added
Actions #21

Updated by Erik Hoogland 10 months ago

  • Subtask #30551 added
Actions #22

Updated by Bram Geerlings 9 months ago

  • Subtask #30569 added
Actions #23

Updated by Tahir Malik 9 months ago

  • Target version changed from Contezza Development 2025.01 to Tezza 2025.02
Actions #24

Updated by Tahir Malik 8 months ago

  • Subtask #31012 added
Actions #25

Updated by Bram Geerlings 8 months ago

  • Subtask #31098 added
Actions #26

Updated by Olav Allema 5 months ago

  • Target version changed from Tezza 2025.02 to Tezza 2025.05
Actions #27

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?

Actions #28

Updated by Bram Geerlings 4 months ago

  • Target version changed from Tezza 2025.05 to Contezza Development 2025.06
Actions #29

Updated by Tahir Malik 4 months ago

  • Status changed from Feedback to In Progress
Actions #30

Updated by Bram Geerlings 3 months ago

  • Subtask #33041 added
Actions #31

Updated by Tahir Malik 3 months ago

  • Target version changed from Contezza Development 2025.06 to Contezza Development 2025.08
Actions #32

Updated by Tahir Malik 2 months ago

  1. 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
  2. In de lijst wil ik per profiel kunnen inzien of deze wel/niet gepubliceerd is, nu is dat onderscheid niet te maken
Actions #33

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?
Actions #34

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/

Actions #35

Updated by Diego Mirandola 2 months ago

  • Subtask #34593 added
Actions #36

Updated by Diego Mirandola 2 months ago

  • Subtask #34596 added
Actions #37

Updated by Diego Mirandola 2 months ago

  • Subtask #34597 added
Actions #38

Updated by Bram Geerlings 2 months ago

  • Subtask #34608 added
Actions #39

Updated by Bram Geerlings 2 months ago

  • Subtask #34609 added
Actions #40

Updated by Bram Geerlings about 2 months ago

  • Subtask #34629 added
Actions #41

Updated by Bram Geerlings about 2 months ago

Op dev-tezza gebruikte Keycloak H2 interne database. Dit is aangepast.

Actions #42

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]" 
                }
            ]
    
Actions #43

Updated by Tahir Malik about 2 months ago

  • Subtask #34709 added
Actions #44

Updated by Tahir Malik about 2 months ago

Graag tests geschrijven:
  • Bootstrap
  • Nieuwe profiel aanmaken & publish
  • Diff wijziging doorvoeren/validatie
  • Profiel wijzigen & publish
  • Profiel verwijderen & publish
Actions #46

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.

Actions #47

Updated by Tahir Malik 23 days ago

  • Status changed from In Progress to Closed

Also available in: Atom PDF