Een zoekopdracht die een document vindt waartoe de gebruiker geen toegang heeft, is al mislukt, ook als de interface de uiteindelijke link verbergt. In documentatiesystemen, dossiers, backoffices en kennisbanken ontstaat het risico eerder: in de index, in de opgehaalde fragmenten, in de getoonde metadata en in een antwoord dat wordt gegenereerd op basis van niet-geautoriseerde context.
Semantisch zoeken met machtigingen in PHP moet autorisatie behandelen als onderdeel van het ophalen, niet als een decoratieve controle in de weergave. Het doel is niet alleen bruikbare resultaten teruggeven: het is waarborgen dat elk kandidaatfragment, elke bronverwijzing en elk antwoord uitsluitend is afgeleid van inhoud die de geauthenticeerde principal op dat moment mag raadplegen.
Beslissingen die vóór het indexeren moeten worden vastgelegd

Begin met het definiëren van het corpus en het toegangsmodel. Niet alle inhoud heeft dezelfde levenscyclus of gevoeligheid: een openbaar beleidsdocument, een interne handleiding, een dossier en een extern gedeeld bestand vereisen verschillende regels. U moet ook beslissen welke actie de zoekfunctie mogelijk maakt: een titel vinden, een uittreksel lezen, het document openen, een bijlage downloaden of om een samenvatting vragen. Toestemming voor ontdekking impliceert niet noodzakelijk toestemming om te lezen.
- Principal: gebruiker, serviceaccount of gedelegeerde sessie die de query uitvoert.
- Bereik: organisatie, werkruimte, project, dossier of repository waarin gezocht mag worden.
- Actie: ontdekken, lezen, downloaden of beheren.
- Resource: document en fragment, met de status, classificatie en toewijzing ervan.
- Fouttolerantie: bij autorisatie moet niet onthullen voorrang krijgen; een vals-negatief resultaat is hinderlijk, een vals-positief resultaat kan een datalek zijn.
Vectoriële similariteit begrijpt geen bedrijfsregels. Een embedding vertegenwoordigt nabijheid in betekenis, geen rechtmatige toegang. Daarom mag het ontwerp er niet op vertrouwen dat een “vergelijkbaar” resultaat veilig is, noch dat een generatief model ongepaste context negeert.
Referentiearchitectuur en bron van waarheid
Bewaar machtigingen in een transactionele bron van waarheid: de PHP-applicatie, de database ervan of het documentsysteem dat de resources beheert. De index is een reconstrueerbare projectie, niet de autoriteit die toegang beslist. Als de index corrupt raakt, vertraging oploopt of onvolledige gegevens ontvangt, moet de autorisatielaag de levering kunnen blokkeren.
Een robuuste flow scheidt vier fasen:
- Inhoud wordt geëxtraheerd uit een identificeerbare versie van het document en verdeeld in fragmenten met coherente grenzen.
- Representaties voor ophalen worden berekend en opgeslagen samen met metadata over bereik en versie.
- De query bouwt een autoriseerbaar filter voor de principal en haalt alleen kandidaten op binnen dat bereik.
- De applicatie controleert de machtiging en geldigheid opnieuw voor elke kandidaat voordat deze wordt getoond of als context wordt gebruikt.
Kapsel deze verantwoordelijkheden in PHP in. Een policyservice moet can($principal, 'read', $document) oplossen; een indexadapter moet filters ontvangen die uit die beslissing zijn afgeleid; en de resultaatassembler mag alleen geverifieerde kandidaten accepteren. Voorkom dat controllers, sjablonen of prompts zelf machtigingsfilters samenstellen.
Metadata waarmee u kunt filteren zonder te gokken
Elk document en fragment heeft een stabiele identificatie van organisatie en resource, een inhoudsversie, indexatiestatus en een verwijzing naar het bovenliggende document nodig. Voeg de attributen toe die nodig zijn om het beleid uit te drukken, maar dupliceer geen gevoelige gegevens zonder noodzaak.
- tenant_id of organisatie: verplichte barrière in omgevingen met meerdere klanten.
- document_id en chunk_id: traceerbaarheid van het resultaat tot de bron.
- acl_revision: versie van het beleid die bij het indexeren is toegepast.
- audience: eenvoudig bereik, zoals intern publiek, team, project of dossier.
- lifecycle_state: actief, gearchiveerd, verwijderd of in afwachting van beoordeling.
- content_revision: voorkomt het citeren van een inmiddels vervangen versie.
Indexeer geen gigantische lijst van gebruikers per fragment als het beleid op veranderlijke groepen is gebaseerd: dat verhoogt de kosten, legt relaties bloot en veroudert slecht. Het verdient de voorkeur om waar mogelijk op stabiele bereiken te filteren en uitzonderingen in de verificatie achteraf op te lossen. Als de zoekengine geen betrouwbare filters ondersteunt, mag deze geen inhoud uit meerdere beveiligingsbereiken in dezelfde doorzoekbare ruimte ontvangen.
Filteren vóór het ophalen en verifiëren erna
Vooraf filteren verkleint het blootstellingsoppervlak: de semantische query moet organisatie, actieve status en de toegestane bereiken opnemen voordat de uiteindelijke kandidaten worden berekend. Zo wordt voorkomen dat verboden tekst de ranking, uittreksels of de context van een antwoord met AI-ondersteunde generatie beïnvloedt.
Verificatie achteraf blijft noodzakelijk. Machtigingen kunnen veranderen tussen de query en het lezen, overerving kan afhankelijk zijn van niet-geprojecteerde gegevens of de index kan achterlopen. Haal voor elke kandidaat het actuele document op of raadpleeg een autorisatiecache met veilige invalidatie. Als de controle faalt, verwerp het fragment dan zonder de titel, score of het bestaan ervan prijs te geven.
Wanneer er AI-ondersteunde generatie plaatsvindt, geef het model dan alleen reeds geautoriseerde en geverifieerde fragmenten. Definieer een concreet toepassingsscenario, zoals het samenvatten van opgehaalde resultaten; evalueer antwoorden met toegestane en verboden gevallen; bewaar verifieerbare bronverwijzingen; beperk de kosten per query; en houd een niet-generatief alternatief beschikbaar, zoals een resultatenlijst. Een model vervangt noch het toegangsbeleid noch de menselijke controle over gevoelige inhoud.
Overerving, links en intrekkingen die eenvoudige ontwerpen doorbreken
Groepen, overgeërfde mappen en gedeelde links veroorzaken indirecte wijzigingen. Iemand die een groep verlaat, een document dat van map verandert of een link die verloopt, moeten zowel het openen als het ophalen beïnvloeden. Modelleer de prioriteit tussen directe machtigingen, overerving en weigeringen expliciet, en test conflicten.
Intrekkingen vereisen een strengere strategie dan toekenningen. Publiceer gebeurtenissen voor wijzigingen in inhoud en ACL via een transactionele wachtrij of een wijzigingslog; een achtergrondproces herberekent metadata en verwijdert of herindexeert fragmenten. Terwijl de index convergeert, beschermt verificatie achteraf de levering. Markeer bij verwijderingen de resource onmiddellijk als niet beschikbaar in de bron van waarheid en purgeer de fragmenten asynchroon, met waarschuwingen als de vertraging de operationele doelstelling overschrijdt.
Controleerbare resultaten, tests en observeerbaarheid
Toon titel, beperkt uittreksel, locatie en datum alleen als die velden ook leesbaar zijn. Elk resultaat moet naar de oorspronkelijke geautoriseerde resource leiden; een bronverwijzing mag geen pad, auteur of tekst van een verborgen document onthullen. Gebruik bij afwezigheid van resultaten een neutrale melding: bevestig niet of er inhoud buiten het bereik van de gebruiker bestaat.
Bouw een testmatrix met gebruikers uit verschillende organisaties, leden en niet-leden van groepen, beperkte beheerders, verlopen links en resources die tijdens een sessie worden ingetrokken. Test directe queries, synoniemen, zeldzame termen en vragen die zijn ontworpen om verboden inhoud aan te trekken. Verwachte resultaten omvatten lege lijsten wanneer alles wat relevant is, verboden is.
Registreer, zonder onnodig gevoelige queries op te slaan, de indexversie, toegepaste filters, het aantal kandidaten vóór en na verificatie, latentie, weigeringen en synchronisatievertraging. Een toename van verwerpingen achteraf kan wijzen op verouderde ACL's; nul resultaten na een migratie kunnen op te strikte filters duiden; queries tussen organisaties zijn een waarschuwing voor isolatie.
Wanneer u een andere oplossing moet kiezen en afsluitende checklist

Semantisch zoeken loont niet altijd. Voor kleine catalogi en een stabiele woordenschat zijn filters, tekstueel zoeken en hiërarchische navigatie beter uitlegbaar en goedkoper. Ze verdienen ook de voorkeur wanneer machtigingen zeer dynamisch zijn en de engine niet veilig op attributen kan filteren. Gebruik semantisch ophalen wanneer dit echte waarde toevoegt aan queries die in natuurlijke taal zijn geformuleerd en volledige toegangscontrole kan worden gewaarborgd.
- De bron van waarheid beslist over toegang en de index kan opnieuw worden opgebouwd.
- Alle fragmenten hebben een organisatie, document, versie en status.
- De query filtert vóór het ophalen en verifieert vóór levering.
- Toekenningen, wijzigingen, intrekkingen en verwijderingen hebben observeerbare synchronisatie.
- AI-ondersteunde antwoorden gebruiken alleen geautoriseerde context, bronverwijzingen en een alternatief zonder AI.
- De tests omvatten opzettelijke pogingen tot ongeoorloofde toegang en lege resultaten.



