Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Zugriffsrechte und veraltete Daten in der Suche

Nach dieser Lektion: Ich kann eine Suche innerhalb dessen halten, was jede Person sehen darf, und ein Löschen oder eine neue Version bis in den Index bringen.

Lektion, 65 Min.4 BefehleLab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Eine Suche, die Geheimnisse verrät

Zugriffsrechte in der Suche bedeuten, dass jede Person nur findet, was sie lesen darf. Aktualität bedeutet, dass gelöschter oder alter Text aus dem Index verschwindet. Beides ist wichtig, weil die Suche Ihre Dokumente an einen neuen Ort kopiert und die Kopie die Regeln des Originals ignoriert.

Eine Studentin sucht „Termine Urlaub“ und erhält eine Gehaltsseite. Oder eine gelöschte Regel antwortet noch.

Das Ziel dieser Lektion

Notiz

Ich kann eine Suche innerhalb dessen halten, was jede Person sehen darf, und ein Löschen oder eine neue Version bis in den Index bringen.

Schlüsselwörter

BegriffWas er bedeutet
Zugriffsfiltereine Regel, die nur behält, was eine Person lesen darf
Gruppeeine benannte Menge von Personen mit gemeinsamem Zugriff
Veralteteine Kopie, die älter ist als die aktuelle Version
Versioneine Nummer, die bei jeder Änderung eines Dokuments steigt
Löschvermerkein Eintrag, dass etwas gelöscht wurde
Datenlecketwas jemandem zeigen, der es nicht sehen darf

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Erst filtern, dann ordnen, nie umgekehrt

Jedes Stück trägt die Gruppen, die es lesen dürfen, eine Art Metadaten. Bei der Anfrage behält die Suche nur die Stücke, die die Gruppen des Fragenden erlauben, und nimmt dann die besten k.

Filtern nach den ersten k geht doppelt schief. Eine versteckte Seite belegt einen Platz, also erhält die Person weniger Ergebnisse, als sie sollte. Und eine Zahl wie „3 Ergebnisse, 2 versteckt“ verrät, dass diese Seiten existieren.

Durchgerechnetes Beispiel: Anna sucht Urlaubstermine

VorgehenErgebnisse für AnnaWas schiefgeht
Filter nach den ersten 2e1Eine Gehaltsseite belegte einen Platz und wurde dann versteckt
Filter vor den ersten 2e1, e3Nichts
Filter davor, Veraltetes entfernte1Die alte Kopie e3 ist weg

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Löschen muss den Index erreichen

Der Index hält seine eigene Kopie jedes Dokuments. Die Quelldatei zu löschen berührt diese Kopie nicht, also antwortet der alte Text weiter. Löschen Sie jedes Stück des Dokuments im Index und in jedem Antwort-Cache im selben Schritt.

Ein geändertes Dokument ist dasselbe Problem. Geben Sie jedem Stück eine Version. Verwerfen Sie Stücke, die älter sind als die aktuelle Version, wenn das Dokument aufgefrischt wird.

Ein häufiger Fehler

Warnung

Viele glauben, das Löschen der Quelldatei entferne den Text aus der Suche. Der Index hat eine Kopie behalten, also wird der Text weiter gefunden. Löschen Sie auch im Index und prüfen Sie es mit einer Suche nach einem Satz der gelöschten Seite.

Die Suche mit Rechten schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const eintraege = [' '  { id: \"e2\", dok: \"gehalt\", gruppen: [\"personal\"], version: 1, text: \"prämien und termine für urlaub von führungskräften\" },' '  { id: \"e4\", dok: \"dienstplan\", gruppen: [\"personal\"], version: 1, text: \"wer arbeitet im urlaub\" },' '  { id: \"e1\", dok: \"handbuch\", gruppen: [\"personal\", \"studierende\"], version: 2, text: \"termine für den urlaub im semester\" },' '  { id: \"e3\", dok: \"handbuch\", gruppen: [\"personal\", \"studierende\"], version: 1, text: \"alte termine für urlaub\" },' '];' 'const aktuell = { handbuch: 2, gehalt: 1, dienstplan: 1 };' 'const anna = { name: \"anna\", gruppen: [\"studierende\"] };' > zugriff1.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Suche mit Rechten schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function erlaubt(e, nutzer) { return e.gruppen.some(function (g) { return nutzer.gruppen.includes(g); }); }' 'function wert(e, q) { return q.filter(function (w) { return e.text.split(\" \").includes(w); }).length; }' 'function beste(liste, q, k) {' '  return liste.filter(function (e) { return wert(e, q) > 0; })' '    .sort(function (a, b) { return wert(b, q) - wert(a, q); })' '    .slice(0, k);' '}' 'function ids(liste) { return liste.map(function (e) { return e.id; }).join(\" \") || \"nichts\"; }' >> zugriff1.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Suche mit Rechten schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const q = [\"urlaub\", \"termine\"];' 'function meine(liste) { return liste.filter(function (e) { return erlaubt(e, anna); }); }' 'console.log(\"Filter nach den ersten 2:\", ids(meine(beste(eintraege, q, 2))));' 'console.log(\"Filter vor den ersten 2:\", ids(beste(meine(eintraege), q, 2)));' 'const frisch = eintraege.filter(function (e) { return e.version >= aktuell[e.dok]; });' 'console.log(\"und veraltete Kopien entfernt:\", ids(beste(meine(frisch), q, 2)));' 'const rest = eintraege.filter(function (e) { return e.dok === \"handbuch\" ? false : true; });' 'console.log(\"nach dem Löschen des Handbuchs findet Anna:\", ids(beste(meine(rest), q, 2)));' >> zugriff1.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Starten und die Filter vergleichen

Befehl
docker exec -w /home/node/project agent node zugriff1.js

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das ist ein Platzhalter

Der Index ist eine Liste aus vier Einträgen, eine Person ist ein Name mit Gruppen. Ein echtes System filtert in seiner Suchmaschine, nach dem angemeldeten Konto. Ein Löschen ist ein echter Aufruf an diese Maschine.

Der Run ruft kein Modell auf. Die Regel bleibt gleich: zuerst filtern, überall löschen.

Was der Run ausgibt

ZeileErgebnis
Filter nach den ersten 2e1
Filter vor den ersten 2e1 e3
und veraltete Kopien entfernte1
nach dem Löschen des Handbuchs findet Annanichts

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Über dieses Lab und seinen Quellcode: Lab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.