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
| Begriff | Was er bedeutet |
|---|---|
| Zugriffsfilter | eine Regel, die nur behält, was eine Person lesen darf |
| Gruppe | eine benannte Menge von Personen mit gemeinsamem Zugriff |
| Veraltet | eine Kopie, die älter ist als die aktuelle Version |
| Version | eine Nummer, die bei jeder Änderung eines Dokuments steigt |
| Löschvermerk | ein Eintrag, dass etwas gelöscht wurde |
| Datenleck | etwas 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
| Vorgehen | Ergebnisse für Anna | Was schiefgeht |
|---|---|---|
| Filter nach den ersten 2 | e1 | Eine Gehaltsseite belegte einen Platz und wurde dann versteckt |
| Filter vor den ersten 2 | e1, e3 | Nichts |
| Filter davor, Veraltetes entfernt | e1 | Die 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
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
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
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
docker exec -w /home/node/project agent node zugriff1.jsHier 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
| Zeile | Ergebnis |
|---|---|
| Filter nach den ersten 2 | e1 |
| Filter vor den ersten 2 | e1 e3 |
| und veraltete Kopien entfernt | e1 |
| nach dem Löschen des Handbuchs findet Anna | nichts |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.