Persistente Berechtigungen für die File System Access API

Es gibt jetzt eine Möglichkeit, dauerhaften Lese- und Schreibzugriff auf Dateien und Ordner zu erhalten, ohne wiederholt Berechtigungen erteilen zu müssen. In diesem Beitrag wird die Funktionsweise erläutert. Bevor wir ins Detail gehen, fassen Sie kurz den Status quo und das zu lösende Problem zusammen.

Herausforderungen bei der aktuellen Methode

Mit der File System Access API können Entwickler zum Lesen und Schreiben auf Dateien auf der lokalen Festplatte des Nutzers zugreifen. Eine beliebte (und viele andere) App, die diese API nutzt, ist Visual Studio Code (VS Code), die IDE von Microsoft, die direkt im Browser ausgeführt wird. Wenn Sie VS Code öffnen, werden Sie mit einem Willkommensbildschirm begrüßt. Dort können Sie eine neue Datei erstellen oder eine vorhandene Datei oder einen Ordner öffnen.

Begrüßungsbildschirm von Visual Studio Code

Wenn Sie auf Ordner öffnen klicken und einen der Ordner auf Ihrer Festplatte auswählen, werden Sie im Browser gefragt, ob VS Code Lesezugriff auf diesen Ordner haben soll.

Visual Studio Code für Lesezugriff

Nachdem Sie den Zugriff gewährt haben, können Sie in der Ordnerhierarchie navigieren und Dateien im VS Code-Editor öffnen. Wenn Sie eine Änderung an einer Datei vornehmen, werden Sie vom Browser gefragt, ob Sie edit-Zugriff auf den Ordner gewähren möchten.

Visual Studio Code bittet um Bearbeitungszugriff

Wenn Sie dies zulassen, ändert sich das Dateisymbol in der Adressleiste und ein kleiner Abwärtspfeil wird hinzugefügt, der angibt, dass die App Lese- und Schreibberechtigungen hat. Um die Berechtigungen zu ändern, klicken Sie auf das Symbol und dann auf Zugriff entfernen, damit die Anwendung keine Dateien mehr bearbeiten kann.

Visual Studio Code mit Eingabeaufforderung für das Symbol der Adressleiste.

Der Zugriff bleibt so lange bestehen, bis Sie den letzten Tab des Ursprungs schließen. Wenn Sie die App dann schließen und wieder öffnen, können Sie mit VS Code dort weitermachen, wo Sie aufgehört haben. Wenn Sie auf Open Recent (Zuletzt geöffnet) klicken, bietet VS Code den zuvor geöffneten Ordner zum erneuten Öffnen an.

Visual Studio Code mit den zuletzt geöffneten Dateien

Aber auch wenn Sie bereits eine Schreibberechtigung für den Ordner erteilt haben, müssen Sie dies jetzt noch einmal tun. Das wird wirklich schnell müde. Bevor wir uns mit der Lösung befassen, d. h. persistenten Berechtigungen für die File System Access API, wie schafft VS Code überhaupt, die letzten Ordner zu speichern?

Visual Studio Code fordert nach dem Aktualisieren Bearbeitungszugriff an.

In der File System Access API wird der Zugriff auf Dateien und Ordner über FileSystemHandle-Objekte verwaltet: FileSystemFileHandle-Objekte für Dateien und FileSystemDirectoryHandle-Objekte für Ordner (Verzeichnisse). Beide können in IndexedDB gespeichert werden. Genau das macht VS Code. Öffnen Sie dazu die Chrome-Entwicklertools, gehen Sie auf dem Tab Application (Anwendung) zum Abschnitt „IndexedDB“ und wählen Sie die relevante Tabelle vscode-filehandles-store in der vscode-web-db-Datenbank aus.

Chrome-Entwicklertools, die den Visual Studio-Code debuggen, wobei der Abschnitt „IndexedDB“ mit dem gespeicherten FileSystemHandle angezeigt wird.

Der neue Weg: Was ändert sich und wann?

In Chrome wird ein neues Verhalten eingeführt, mit dem Nutzer optional dauerhaften Zugriff auf ihre Dateien und Ordner gewähren können, damit sie nicht ständig neu aufgefordert werden müssen. Das neue Verhalten ist ab Chrome 122 zu beobachten. Wenn Sie dies früher testen möchten, setzen Sie ab Chrome 120 die beiden Flags chrome://flags/#file-system-access-persistent-permission und chrome://flags/#one-time-permission auf Aktiviert.

Zum einen besteht das neue Verhalten aus einer neuen dreifachen Berechtigungsaufforderung, mit der Nutzer optional bei jedem Besuch Apps Zugriff auf ausgewählte Dateien und Ordner gewähren können.

Visual Studio Code mit dreifacher Berechtigungsaufforderung.

Diese neue dreiseitige Aufforderung hat folgende Optionen:

  • Diese Zeit erlauben:Die App darf in der aktuellen Sitzung auf Dateien zugreifen. (Dies entspricht dem bestehenden Verhalten.)
  • Bei jedem Besuch zulassen:Die App hat unbeschränkten Zugriff, sofern der Zugriff nicht widerrufen wird. Sobald der Anwendung dauerhaft Zugriff gewährt wurde, können auch neu geöffnete Dateien und Ordner dauerhaft aufgerufen werden.
  • Nicht zulassen:Die App darf nicht auf Dateien zugreifen. (Dies entspricht dem bestehenden Verhalten.)

Zweitens umfasst das neue Verhalten einen neuen Bereich in den Websiteeinstellungen, zu dem Nutzer über ein Startsymbol neben der Ein/Aus-Schaltfläche Dateibearbeitung gelangen.

Website-Einstellungen in Visual Studio Code mit Symbol zur Dateibearbeitung

Wenn auf dieses Startsymbol geklickt wird, werden die Einstellungen für Datenschutz und Sicherheit für die betreffende Anwendung geöffnet. Dort sieht der Nutzer eine Liste mit Elementen für alle Dateien und Ordner, auf die die Anwendung Zugriff hat. Der Zugriff kann für einzelne Artikel mit einem Klick auf das Papierkorbsymbol widerrufen werden. Wenn der Zugriff pro Element entfernt wird, kann der Anwendung weiterhin allgemein Zugriff auf Dateien gewährt werden. Um den Zugriff im Allgemeinen zu widerrufen, kann der Nutzer auf das Symbol in der Adressleiste klicken, wie zuvor beschrieben.

Datenschutz- und Sicherheitseinstellungen in Chrome für die vscode.dev-Website.

So lösen Sie das neue Verhalten aus

An der File System Access API wurden keine Änderungen für Entwickler vorgenommen. Es gibt drei Möglichkeiten mit unterschiedlichen Voraussetzungen, um das neue Verhalten mit dauerhaften Berechtigungen auszulösen:

  1. Der Nutzer muss während des letzten Besuchs an einem Ursprung eine Berechtigung für eine Datei oder einen Ordner (oder mehrere Dateien oder Ordner) erteilt haben und die App muss die entsprechenden FileSystemHandle-Objekte in IndexedDB gespeichert haben. Beim nächsten Besuch im Ursprung muss die App eines der gespeicherten FileSystemHandle-Objekte aus IndexedDB abgerufen und dann die Methode FileSystemHandle.requestPermission() aufgerufen haben. Wenn diese Voraussetzungen erfüllt sind, wird die neue dreifache Aufforderung angezeigt.
  2. Der Ursprung muss die Methode FileSystemHandle.requestPermission() auf einem FileSystemHandle aufgerufen haben, für das zuvor Zugriff gewährt wurde, dessen Zugriff aber automatisch widerrufen wurde, da der Tab eine Zeit lang im Hintergrund war. Der automatische Berechtigungswiderruf basiert auf derselben Logik wie im Artikel Einmalige Berechtigungen in Chrome beschrieben. Wenn diese Voraussetzungen erfüllt sind, wird die neue dreiseitige Aufforderung angezeigt.
  3. Der Nutzer muss die App installiert haben. Die Berechtigungen bleiben automatisch erhalten, sobald der Nutzer den Zugriff gewährt. In diesem Fall wird die dreifache Aufforderung nicht angezeigt. Stattdessen erhält die Anwendung standardmäßig das neue Verhalten.

Im ersten und zweiten Fall werden in der Eingabeaufforderung alle FileSystemHandle-Objekte aufgelistet, auf die die App zuvor Zugriff hatte, nicht nur das Objekt, für das die Methode requestPermission() aufgerufen wurde. Wenn Sie sich an die Funktionsweise von einmaligen Berechtigungen halten: Wenn der Nutzer die Aufforderung mehr als dreimal ablehnt oder ablehnt, wird sie nicht mehr ausgelöst. Stattdessen wird die normale Berechtigungsaufforderung angezeigt.

Neues Verhalten ausprobieren

Wenn Sie eine unterstützende Version von Chrome verwenden oder die erforderlichen Flags festgelegt haben, können Sie das neue Verhalten in VS Code im Web testen. Öffnen Sie einen Ordner und gewähren Sie Zugriff. Schließen Sie dann den Tab und öffnen Sie ihn wieder. Klicken Sie dann auf Kürzliche Aktualisierung öffnen. Beachten Sie, dass die sofortige Aktualisierung zum Auslösen der Eingabeaufforderung nicht funktioniert. Alle Tabs müssen geschlossen werden. Wähle den vorherigen Ordner aus, um die neue Eingabeaufforderung zu sehen. Für einen reduzierten Testlauf sehen Sie sich die Demo zum Zugriff auf persistente Dateisysteme an und sehen Sie sich den Quellcode an.

Ergebnisse

Dauerhafte Berechtigungen für die File System Access API sind eine der am häufigsten angeforderten Funktionen der API und auch der Implementierungsfehler ist sehr beliebt, der von vielen Entwicklern verwendet wird. Da dieses Feature den Entwicklern und vor allem den Nutzern zur Verfügung gestellt wird, ist eine wichtige Funktionslücke im Vergleich zu plattformspezifischen Apps geschlossen.

Danksagung

Dieser Beitrag wurde von Christine Hollingsworth, Austin Sullivan und Rachel Andrew bewertet.