Levenscyclus van gebruikers en tenants
Deze pagina beschrijft wat er gebeurt, en wanneer, in de twee levenscycli die er het meest toe doen: die van de mensen in je organisatie en die van de organisatie zelf. In beide levenscycli is vernietiging alleen onomkeerbaar wanneer dat moet (na afloop van de bewaartermijn); elke stap daarvoor kun je terugdraaien.
Levenscyclus van een gebruiker
Een gebruiker bestaat in fremforge alleen als lid van een of meer organisaties. Iemand uit een organisatie verwijderen is een handeling per tenant; het hele account wordt pas gedeactiveerd als iemand uit zijn laatste organisatie wordt verwijderd.
Verwijdering uit één organisatie
Je verwijdert een lid uit je organisatie handmatig (het onderdeel Gebruikersbeheer onder Facturatie toont elk lid met de laatste activiteit, ondersteunt verwijderen in bulk en biedt een optioneel beleid voor automatisch opschonen) of via SCIM-deprovisioning vanuit je IdP. Het gedrag is in beide gevallen hetzelfde:
- De Forgejo-gebeurtenis
org_member.removedwordt verstuurd. - fremforge berekent
seats_in_useopnieuw op basis van de actuele ledenlijst in Forgejo en schrijft een auditgebeurtenistenant.seat.released. De vrijgekomen plek is direct beschikbaar voor je volgende uitnodiging of SSO-JIT-aanmelding. - Persoonlijke toegangstokens die de vertrekkende gebruiker voor deze tenant heeft en die tot de organisatie zijn beperkt, worden ingetrokken.
- Was dit de laatste organisatie van de gebruiker, dan start de deactivering van verweesde accounts die hieronder wordt beschreven.
Je contractuele maximum aantal gebruikers wordt nooit verlaagd door opschonen. seats_in_use daalt; het maximum blijft staan. Wil je het maximum verlagen, gebruik dan de pagina Facturatie (een verlaging gaat in bij de volgende verlenging; jaarlijkse vooruitbetaling wordt volgens de voorwaarden §4.7 niet terugbetaald).
Automatisch opschonen van inactieve accounts
Op de pagina Leden kan een eigenaar een drempel voor inactiviteit instellen (standaard: uitgeschakeld). Zodra die is ingesteld, verwijdert een dagelijkse taak leden van wie de Forgejo-waarde last_login ouder is dan de drempel. Eigenaren, operatoraccounts en botaccounts worden nooit automatisch verwijderd; een ondergrens per tenant (standaard 30 dagen) voorkomt dat leden bij een lange afwezigheid per ongeluk worden verwijderd. De dagelijkse taak verwijdert maximaal 50 leden per tenant per dag: een veiligheidsrem, zodat een verkeerd ingesteld beleid niet in één keer een hele organisatie leegmaakt.
Deactivering van verweesde accounts (laatste organisatie)
Houdt een gebruiker na de verwijdering per tenant hierboven geen enkel lidmaatschap van een organisatie meer over, over alle tenants heen, dan doet fremforge automatisch het volgende:
- Het zet
prohibit_login=trueop de Forgejo-gebruiker (aanmelden via SSO of lokale inloggegevens is niet meer mogelijk). - Het trekt elk persoonlijk toegangstoken in dat de gebruiker in Forgejo heeft, waar dan ook.
- Het archiveert, maar verwijdert NIET, de repository’s in de persoonlijke namespace van de gebruiker. Archiveren behoudt de geschiedenis; de klant kan herstellen door de gebruiker opnieuw uit te nodigen voordat de termijn van 14 dagen tot definitieve verwijdering afloopt.
- Het legt de deactivering vast in het register
orphaned_usersmetcleanup_due_at = today + 14 days.
Nodig je de gebruiker binnen die 14 dagen opnieuw uit voor een organisatie, dan wordt hij hersteld: prohibit_login wordt opgeheven, tokens kunnen opnieuw worden aangemaakt en de markering als verweesd account krijgt een stempel restored_at, zodat de taak voor definitieve verwijdering hem overslaat.
Definitieve verwijdering (verweesd +14 dagen)
Een dagelijkse taak verwijdert definitief de Forgejo-accounts die langer dan 14 dagen als verweesd zijn gedeactiveerd en in die periode niet opnieuw zijn uitgenodigd. Met 14 dagen blijft de hele verwijdering, inclusief de opslagkopieën die na een verwijdering nog 7 dagen worden bewaard, binnen de 30 dagen die de privacyverklaring §6 voor accountgegevens belooft. De Forgejo-aanroep DELETE /api/v1/admin/users/{u} verwijdert het gebruikersaccount; de gearchiveerde persoonlijke repository’s van de gebruiker verdwijnen daarmee ook. Het auditlog bewaart voor de traceerbaarheid een gebeurtenis forgejo.user.orphan_hard_deleted, gekoppeld aan de tenant die het proces oorspronkelijk in gang zette.
Na de definitieve verwijdering zijn de gebruikersnaam en de accountgeschiedenis weg. Na de termijn van 14 dagen is geen herstel mogelijk; maak zo nodig een nieuwe gebruiker aan vanuit je IdP.
Levenscyclus van een tenant
Een tenant doorloopt vijf toestanden. De toestandsmachine gaat alleen vooruit, behalve via het terugdraaipad cancellation_scheduled → active en het heractiveringspad suspended → active.
| Toestand | Aanleiding | Wat het betekent |
|---|---|---|
trial | Aanmelding | De eerste 30 dagen, geen kaart nodig. De taak voor het opschorten van proefperiodes zet de tenant op suspended als hij uiterlijk op trial_expires_at niet is omgezet. |
active | Betaald abonnement start | Normaal gebruik. |
suspended | Aanmaningstraject voorbij T+14, of proefperiode verlopen | Schrijftoegang staat stil; lezen, exporteren en heractiveren werken nog. |
cancellation_scheduled | De klant heeft opgezegd | De dienst loopt door tot cancel_effective_at. Terugdraaien zet de tenant op elk moment vóór die datum terug op active. |
cancelled | cancel_effective_at is bereikt | De Forgejo-organisatie wordt alleen-lezen. Periode van 90 dagen voor export en heractivering. |
deleted | cancel_effective_at + 90d | De Forgejo-organisatie en de persoonsgegevens worden permanent vernietigd. Er wordt een vernietigingscertificaat uitgegeven. |
Opzegging gestart
Als je op de pagina Facturatie op Abonnement opzeggen klikt:
- De status wordt
cancellation_scheduledencancel_effective_atwordt ingesteld (maandelijkse termijn: +30 dagen; jaarlijkse termijn: de einddatum van de vooruitbetaalde verplichting; een jaarabonnement wordt volgens de voorwaarden §4.7 niet terugbetaald). - Eventueel lopende overschrijding wordt verrekend met de actieve betaalmethode.
- Het SEPA-mandaat bij Mollie wordt ingetrokken, zodat er geen automatische afschrijvingen meer plaatsvinden.
- Elke ontvanger in
billing_emailskrijgt een bevestigingsmail. De pagina Facturatie toont nu een aftelbanner met de datum waarop de alleen-lezenperiode eindigt, een knop om je gegevens te exporteren en een knop om de opzegging ongedaan te maken.
De knop om ongedaan te maken is beschikbaar tot cancel_effective_at, en daarna opnieuw tijdens de alleen-lezenperiode van 90 dagen via de knop om te heractiveren (je stelt dan een nieuwe betaalmethode in via de gewone checkout).
Opzegging van kracht (+0 dagen)
Op cancel_effective_at zet de dagelijkse taak cancellation-effect de status op cancelled en archiveert ze elke repository in de Forgejo-organisatie (alleen-lezen). De organisatie zelf blijft bestaan en de gegevens blijven staan; schrijftoegang staat overal stil, behalve in Facturatie (voor heractivering) en Gegevensexport (voor overdraagbaarheid).
Permanente verwijdering (+90 dagen)
Negentig dagen nadat de opzegging van kracht werd, voert dezelfde dagelijkse taak het fysieke wissen uit. De verwijdering houdt rekening met de volgende voorwaarden, en elk ervan houdt het wissen voor die dag tegen:
legal_hold = trueop de tenant (een bewaarvlag die een operator instelt bij een bewaarbevel).- Een exporttaak die nog in de wachtrij staat of loopt.
- Een lopende betaling (Mollie-webhookstatus
open,pendingofauthorized).
Zodra aan alle voorwaarden is voldaan, doet fremforge het volgende:
- Het schrijft de auditgebeurtenis
tenant.physically_deleted(vastgelegd zolang de tenantcontext nog geldig is, zodat de auditketen de handeling bevat). - Het trekt het Renovate-botaccount van de tenant in, samen met zijn token.
- Het verwijdert webhookleveringen voor de tenant die nog in de wachtrij staan.
- Het verwijdert de Forgejo-organisatie: repository’s, LFS-objecten en de volledige toestand van de organisatie.
- Het verwijdert het klantrecord bij Mollie.
- Het wist de persoonsgegevens van de tenant (weergavenaam, e-mailadres van het factuurcontact, factuur-e-mailadressen, verwijzingen naar Mollie en Dinero, btw-nummer) en markeert de tenant als verwijderd.
- Het maakt de pdf van het vernietigingscertificaat (zie hieronder) en archiveert die in OBS, in de bucket die door legal hold is beschermd. Het certificaat wordt gemaild naar het vastgelegde e-mailadres van het factuurcontact.
Vernietigingscertificaat
Een pdf van één pagina die op het moment van fysieke verwijdering wordt gemaakt en naar het factuurcontact wordt gemaild. Het certificaat vermeldt:
- De slug van de organisatie, de weergavenaam, het btw-nummer en de identificatie van de tenant.
- De datum waarop de opzegging van kracht werd en de datum van permanente verwijdering.
- De categorieën vernietigde gegevens (Forgejo-inhoud, tenantconfiguratie, accounts van leden binnen de tenant, auditpayloads, persoonsgegevens voor facturatie).
- De resterende uitzonderingen op de bewaartermijnen die nog gelden (zie hieronder).
- Een SHA-256-ankerhash die het certificaat koppelt aan de auditgebeurtenis
tenant.physically_deleted, zodat je beide tegen elkaar kunt controleren.
Heb je later een nieuw exemplaar nodig, dan staat het archief in een OBS-bucket met WORM-vergrendeling. Mail naar compliance@frem.sh, dan geven we het opnieuw uit vanuit het archief.
Bewaartermijnen (DPA §9)
| Tijd na opzegging | Wat er gebeurt |
|---|---|
| +0 dagen (cancel_effective_at) | Status → cancelled. Forgejo-organisatie gearchiveerd, alleen-lezen. Exporteren en heractiveren mogelijk. |
| +90 dagen | Status → deleted. De Forgejo-organisatie wordt fysiek verwijderd; haar bestanden (LFS, bijlagen, pakketten, avatars) blijven nog 7 dagen als oude versies in de objectopslag staan en zijn rond +102 dagen weg, binnen de 30 dagen die DPA §9 toestaat. Persoonsgegevens gewist. Klantrecord bij Mollie verwijderd. Vernietigingscertificaat uitgegeven. Dezelfde nacht worden de persoonsgegevens in de auditgebeurtenissen van de tenant gepseudonimiseerd (actor en payload gewist; de hashketen blijft verifieerbaar). Houdt een voorwaarde het wissen tegen (een lopende export of betaling, legal hold) of mislukt het, dan wordt het elke nacht opnieuw geprobeerd, en volgt de pseudonimisering in de nacht dat het wissen is voltooid. |
| +150 dagen (tot 2026-11-03) | Tot 2026-11-03: back-ups met de tenant worden uiterlijk op +150 dagen opgeschoond (DPA 1.39 §9). |
| tot +210 dagen (vanaf 2026-11-03) | Vanaf 2026-11-03 (DPA 1.41 §9): back-ups worden niet per tenant bewerkt, dus verwijderde gegevens blijven in de versleutelde back-ups staan totdat die verlopen, tot 90 dagen na de verwijdering en uiterlijk op +210 dagen na de opzegging. |
Resterende uitzonderingen
Voor sommige categorieën gegevens geldt een wettelijke bewaarplicht die langer duurt dan de primaire verwijdering op +90 dagen. Ze zijn beschreven in DPA §9 en staan op het vernietigingscertificaat:
- Boekhoudkundige gegevens (facturen, bijlagen bij boekingen): 5 jaar bewaard volgens Bogføringsloven §10.
- Metadata van het auditlog: 3 jaar bewaard, gepseudonimiseerd bij de verwijdering (+90 dagen, of de nacht dat een uitgesteld wissen is voltooid); geen inhoud van repository’s, geen persoonsgegevens.
- Complianceobjecten met WORM-vergrendeling (ankers van de auditketen, de pdf van het vernietigingscertificaat zelf): bewaard tot de vergrendelperiode afloopt. Een gedocumenteerde uitzondering in DPA-bijlage §9.
Legal hold
Operators kunnen legal_hold = true op een tenant zetten naar aanleiding van een bewaarbevel (dagvaarding, AVG-onderzoek, geschil). Zolang die vlag staat, slaat de taak cancellation-effect de tenant volledig over: geen fysieke verwijdering, geen wissen van persoonsgegevens, geen opschonen van back-ups. Alleen operators kunnen de vlag zetten; klanten kunnen hem niet wijzigen.
De legal hold schort ook, zolang de organisatie actief is, het verwijderen op van elke klasse onder bewaring van bewijs: het redigeren van auditpayloads, de bewaring van toegangslogs, opgeloste bevindingen, SBOM’s, attestaties, exportrecords en het opruimen van bevindingen van gesloten pull requests (sinds 2026-10-08; daarvoor hielden het redigeren van auditpayloads en het opschonen van SBOM’s geen rekening met de legal hold).
Veelgestelde vragen
Er wordt nog een betalende gebruiker geteld, hoewel het lid is vertrokken. De ledenlijst van Forgejo filtert gebruikers met prohibit_login=true eruit, dus een gedeactiveerde gebruiker die zijn laatste organisatie heeft verlaten, telt niet mee in je seats_in_use. Lijkt je aantal verouderd, dan berekent de nachtelijke taak seat-cap-drift-check het opnieuw.
Krijg ik geld terug als ik het maximum aantal gebruikers verlaag? Nee. Een verlaging gaat in bij de volgende factuurperiode (maandelijks) of de jaarlijkse verlenging (jaarlijks). Jaarlijkse vooruitbetaling wordt volgens de voorwaarden §4.7 niet terugbetaald. Zie Facturatie voor het formulier om het maximum te wijzigen.
Kan ik mijn gegevens nog krijgen na de periode van 90 dagen? Nee. Op het moment dat je dit leest, zijn ze al weg (Forgejo-organisatie, repository’s, LFS, leden, persoonsgegevens). Kopieën in de versleutelde back-ups zijn tot 2026-11-03 uiterlijk op +150 dagen weg; vanaf 2026-11-03 (DPA 1.41) verlopen ze met de snapshots, uiterlijk op +210 dagen. Plan je exports tijdens de alleen-lezenperiode; de pagina Facturatie toont precies daarom een exportknop.
Gebeurt het wissen volgens artikel 17 van de AVG bij de opzegging of op +90 dagen? Op +90 dagen wordt de primaire opslag gewist. De back-ups volgen: tot 2026-11-03 worden ze uiterlijk op +150 dagen na de opzegging opgeschoond; vanaf 2026-11-03 (DPA 1.41 §9) verlopen verwijderde gegevens met de versleutelde snapshots, tot 90 dagen na de verwijdering en uiterlijk op +210 dagen. Het vernietigingscertificaat is het document dat je aan je toezichthouder kunt laten zien.
Wat als ik per ongeluk opzeg? Klik op de pagina Facturatie op de knop om de opzegging ongedaan te maken; die werkt tijdens de hele respijtperiode (tot cancel_effective_at). Daarna geeft de alleen-lezenperiode je nog 90 dagen om te heractiveren via de gewone checkout. Na +90 dagen is geen herstel meer mogelijk.