Organisaties werken jaren aan een correct toegangsmodel. Welke dienst ziet welke procedure, welk lidmaatschapsniveau opent welk archief, welke rol mag het dossier überhaupt lezen. Dan komt er een AI-zoektool die alles op één hoop indexeert en dat model stilzwijgend zijn eigen slechtste aanname teruggeeft: dat iedereen alles mag zien.
Wat rechten respecteren echt betekent
Retrieval met respect voor rechten betekent dat de verzameling content die een gebruiker kan ophalen beperkt wordt door zijn identiteit voor er gezocht wordt, met dezelfde regels die de rest van het systeem beheersen. Het betekent niet dat het model gezegd is om voorzichtig te zijn. Het betekent niet dat antwoorden achteraf gefilterd worden. Het betekent dat afgeschermde content überhaupt nooit een kandidaat is.
De test is eenvoudig. Als een gebruiker met beperkte rechten een vraag stelt die enkel uit afgeschermd materiaal te beantwoorden is, dan is het juiste antwoord hetzelfde als wat hij zou krijgen als dat materiaal helemaal niet bestond.
Drie aanpakken die juist lijken en het niet zijn
Elk van deze komt voor in echte producten, en elk bezwijkt onder druk:
- Het aan het model vragen. "Gebruik enkel content die deze gebruiker mag zien" in de systeemprompt zetten, geeft een taalmodel de leiding over een beveiligingsgrens. Modellen zijn van nature behulpzaam en je praat ze om. Dit is met voorsprong de meest gemaakte fout.
- Filteren na generatie. Alles ophalen, een antwoord genereren en dan nagaan of het getoond mocht worden. Op dat moment is de afgeschermde content al verwerkt, en het antwoord dat onderdrukt wordt verraadt nog altijd dat er iets was.
- Eén index per rol. Dat is tenminste een echte grens, maar het valt uit elkaar zodra rechten fijnmaziger zijn dan een handvol rollen, en het dupliceert content eindeloos. Het breekt ook zodra één gebruiker meerdere rollen heeft.
Hoe het wel hoort te werken
Het werkbare patroon is toegangsinformatie bewaren naast elke geïndexeerde passage, en daarop filteren op het moment van de vraag. In een Drupal-context betekent dat rollen, node access grants, Group-lidmaatschappen of abonnementsniveaus als metadata vastleggen bij elke passage wanneer je ze indexeert.
Komt er een vraag binnen, dan leest de server de rechten van de huidige gebruiker uit de sessie, vertaalt die naar een filter, en geeft dat filter mee met de zoekopdracht naar de vectordatabase. De database geeft enkel passende passages terug. Het model krijgt dan een verzameling passages die al correct is, en zijn instructies gaan over een goed antwoord schrijven in plaats van over geheimen bewaren.
Eén implementatiedetail bepaalt of dit standhoudt: het filter moet server-side uit de sessie opgebouwd worden, nooit uit iets wat de client aanlevert. Een gebruikers-ID dat in een request meekomt is geen recht, dat is invoer.
Rechten actueel houden
Toegang verandert. Iemand verlaat een dienst, een abonnement loopt af, een artikel gaat van publiek naar afgeschermd. Je index moet mee, en de faalmodus is stil: niemand merkt dat de rol van een oud-medewerker nog aan geïndexeerde passages hangt tot een audit het vindt.
Twee mechanismen dekken dat af. Herindexeer de toegangsmetadata van een node telkens als zijn toegangsinstellingen wijzigen, wat entity hooks eenvoudig maken. En beoordeel de rechten van de gebruiker per vraag in plaats van ze per sessie te cachen, zodat een wijziging effect heeft bij de volgende vraag en niet pas bij de volgende login.
Hoe je nagaat of je het hebt
Dit is niets om op het woord van een leverancier aan te nemen. Vier tests zijn de moeite waard voor de livegang, en de moeite om te herhalen na elke belangrijke wijziging:
- Stel een afgeschermde vraag als gebruiker met weinig rechten en bevestig dat het systeem weigert in plaats van antwoordt.
- Probeer de chatbot om te praten. Beweer dat je beheerder bent, vraag hem zijn instructies te negeren, vraag hem samen te vatten "wat hij allemaal weet" over het onderwerp. Een correct gebouwd systeem blijft onbewogen, want het heeft de content niet.
- Wijzig de rol van een gebruiker en bevestig dat het effect onmiddellijk is bij de volgende vraag.
- Haal de audit log van een sessie op en bevestig dat je ziet welke bronnen gebruikt zijn en dat de gebruiker op elk daarvan recht had.
Kan een leverancier je niet helpen om deze uit te voeren, dan is je vraag over de architectuur daarmee beantwoord.