Permanente machtigingen voor de File System Access API

Er is nu een manier om permanente lees- en schrijftoegang tot bestanden en mappen te krijgen zonder herhaaldelijk machtigingen te hoeven verlenen. Dit bericht legt uit hoe het werkt. Voordat we in de details duiken, eerst een korte samenvatting van de status quo en het probleem dat wordt opgelost.

Uitdagingen met de huidige methode

Met de File System Access API kunnen ontwikkelaars bestanden op de lokale harde schijf van de gebruiker lezen en (optioneel) schrijven. Een populaire app (naast vele andere ) die gebruikmaakt van deze API is Visual Studio Code (VS Code), de IDE van Microsoft die rechtstreeks in de browser draait. Wanneer u VS Code opent, wordt u begroet met een welkomstscherm waar u een nieuw bestand kunt maken, of een bestaand bestand of een map kunt openen.

Welkomstscherm van Visual Studio Code.

Als u op Map openen klikt en een van de mappen op uw harde schijf selecteert, vraagt ​​de browser of u VS Code leesrechten wilt geven voor deze map.

Visual Studio Code vraagt ​​om weergaverechten.

Zodra u toegang verleent, kunt u door de mappenstructuur navigeren en bestanden openen in de editor van VS Code. Als u een wijziging aanbrengt in een van de bestanden, vraagt ​​de browser of u bewerkingsrechten voor de map wilt verlenen.

Visual Studio Code vraagt ​​om bewerkingsrechten.

Als u dit toestaat, verandert het bestandspictogram in de adresbalk en wordt er een pijltje naar beneden toegevoegd, wat aangeeft dat de app lees- en schrijfrechten heeft. Om de rechten te wijzigen, klikt u op het pictogram en vervolgens op Toegang verwijderen , zodat de app geen bestanden meer kan bewerken.

Visual Studio Code met adresbalkpictogram.

De toegang blijft actief totdat u het laatste tabblad van de bron sluit. Als u de app vervolgens sluit en opnieuw opent, kunt u met VS Code doorgaan waar u gebleven was. Wanneer u op 'Open recente bestanden' klikt, biedt VS Code de eerder geopende map aan om opnieuw te openen.

Visual Studio Code toont de laatst geopende bestanden.

Maar zelfs als je eerder schrijfrechten voor de map hebt verleend, moet je die nu opnieuw verlenen. Dit wordt al snel vermoeiend. Voordat we ingaan op de oplossing, namelijk permanente rechten voor de File System Access API, hoe kan VS Code überhaupt recente mappen onthouden?

Visual Studio Code vraagt ​​om bewerkingsrechten na opnieuw laden.

In de File System Access API wordt de toegang tot bestanden en mappen beheerd via FileSystemHandle objecten: FileSystemFileHandle objecten voor bestanden en FileSystemDirectoryHandle objecten voor mappen. Beide kunnen worden opgeslagen in IndexedDB , en dat is precies wat VS Code doet. U kunt dit zien door Chrome DevTools te openen, op het tabblad Toepassing naar de sectie IndexedDB te gaan en de relevante tabel vscode-filehandles-store in de database vscode-web-db te selecteren.

Chrome DevTools foutopsporing in Visual Studio Code, waarbij de IndexedDB-sectie met de opgeslagen FileSystemHandle wordt weergegeven.

De nieuwe manier: wat verandert er en wanneer?

Chrome lanceert een nieuw gedrag waarmee gebruikers optioneel permanente toegang tot hun bestanden en mappen kunnen verlenen, zodat ze de gebruiker niet steeds opnieuw hoeven te vragen. Het nieuwe gedrag is al te zien vanaf Chrome 122. Om het eerder te testen, kunt u vanaf Chrome 120 de twee vlaggen chrome://flags/#file-system-access-persistent-permission en chrome://flags/#one-time-permission op 'Ingeschakeld' zetten.

Ten eerste bestaat het nieuwe gedrag uit een nieuwe drieweg-toestemmingsprompt waarmee gebruikers optioneel apps toegang kunnen verlenen tot geselecteerde bestanden en mappen bij elk bezoek.

Visual Studio Code met drievoudige toestemmingsprompt.

Deze nieuwe driewegprompt heeft de volgende opties:

  • Deze tijd toestaan: Hiermee geeft u de app toegang tot bestanden voor de huidige sessie. (Dit komt overeen met het bestaande gedrag.)
  • Toestaan ​​bij elk bezoek: Hiermee geeft u de app onbeperkte toegang, tenzij deze wordt ingetrokken. Zodra de app permanente toegang heeft gekregen, zijn nieuw geopende bestanden en mappen ook permanent toegankelijk.
  • Niet toestaan: De app heeft geen toegang tot bestanden. (Dit komt overeen met het bestaande gedrag.)

Ten tweede omvat het nieuwe gedrag een nieuwe sectie in de site-instellingen, die gebruikers kunnen bereiken via een starticoon naast de schakelaar Bestand bewerken.

Site-instellingen van Visual Studio Code met een pictogram voor het bewerken van bestanden.

Wanneer u op dit startpictogram klikt, worden de privacy- en beveiligingsinstellingen voor de betreffende app geopend. De gebruiker ziet dan een lijst met items voor alle bestanden en mappen waartoe de app toegang heeft. De toegang kan per item worden ingetrokken door op het prullenbakpictogram te klikken. Door de toegang per item in te trekken, kan de app in het algemeen nog steeds toegang tot bestanden krijgen. Om de toegang in het algemeen in te trekken, klikt u op het pictogram in de adresbalk, zoals eerder beschreven.

Privacy- en beveiligingsinstellingen van Chrome voor de vscode.dev-site.

Hoe je het nieuwe gedrag kunt triggeren

Er zijn geen wijzigingen voor ontwikkelaars in de File System Access API. Om het nieuwe gedrag met permanente machtigingen te activeren, zijn er drie manieren, met verschillende voorwaarden waaraan moet worden voldaan:

  1. De gebruiker moet tijdens het laatste bezoek aan een bron toestemming hebben gegeven voor een bestand of map (of meerdere bestanden of mappen) en de app moet de bijbehorende FileSystemHandle objecten in IndexedDB hebben opgeslagen. Bij het volgende bezoek aan de bron moet de app een van de opgeslagen FileSystemHandle objecten uit IndexedDB hebben opgehaald en vervolgens de methode FileSystemHandle.requestPermission() hebben aangeroepen. Als aan deze voorwaarden is voldaan, wordt de nieuwe driewegprompt weergegeven.
  2. De oorsprong moet de FileSystemHandle.requestPermission() -methode hebben aangeroepen op een FileSystemHandle waartoe eerder toegang was verleend, maar waarvan de toegang automatisch is ingetrokken omdat het tabblad een tijdje op de achtergrond was. (Het automatisch intrekken van machtigingen werkt op basis van dezelfde logica als beschreven in het artikel Eenmalige machtigingen in Chrome .) Als aan deze voorwaarden is voldaan, wordt de nieuwe driewegprompt weergegeven.
  3. De gebruiker moet de app hebben geïnstalleerd. Geïnstalleerde apps behouden automatisch hun rechten zodra de gebruiker toegang verleent. In dit geval wordt de driewegprompt niet weergegeven, maar krijgt de app standaard het nieuwe gedrag.

In het eerste en tweede geval geeft de prompt alle FileSystemHandle objecten weer waartoe de app eerder toegang had, niet alleen het object waarvoor de requestPermission() methode wordt aangeroepen. In lijn met de manier waarop het werkt met eenmalige machtigingen , wordt de prompt niet meer geactiveerd als de gebruiker deze meer dan drie keer weigert of negeert. In plaats daarvan wordt de normale machtigingsprompt weergegeven.

Probeer het nieuwe gedrag

Als je een ondersteunende versie van Chrome hebt of de vereiste vlaggen hebt ingesteld, kun je het nieuwe gedrag in VS Code online testen. Open een map en verleen toegang. Sluit vervolgens het tabblad, open het opnieuw en klik op 'Open recente' (houd er rekening mee dat direct opnieuw laden niet werkt om de prompt te activeren; alle tabbladen moeten gesloten zijn). Kies de vorige map en de nieuwe prompt wordt weergegeven. Voor een meer beperkte testcase kun je de demo van Persistent File System Access bekijken en de broncode ervan bekijken .

Conclusies

Persistente rechten voor de File System Access API is een van de meest gevraagde features van de API en de implementatiebug is ook zeer populair, met veel ontwikkelaars die er de aandacht op vestigen. Door deze feature beschikbaar te maken voor ontwikkelaars, en vooral voor gebruikers, wordt een belangrijke lacune ten opzichte van platformspecifieke apps gedicht.

Dankbetuigingen

Deze post werd beoordeeld door Christine Hollingsworth , Austin Sullivan en Rachel Andrew .