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 dat u herhaaldelijk machtigingen hoeft te verlenen. In dit bericht wordt uitgelegd 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 werkwijze

Met de File System Access API hebben ontwikkelaars toegang tot bestanden op de lokale harde schijf van de gebruiker, zowel lezend als (optioneel) schrijvend. Een populaire app (naast vele andere ) die gebruik maakt 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 waarin u een nieuw bestand kunt maken of een bestaand bestand of een map kunt openen.

Het welkomstscherm van Visual Studio Code.

Als u op Map openen klikt en een van de mappen op uw harde schijf kiest, zal de browser u vragen of u wilt dat VS Code toegang tot deze map heeft.

Visual Studio Code vraagt ​​om weergavetoegang.

Nadat u toegang heeft verleend, kunt u door de mappenhiërarchie navigeren en bestanden openen in de editor van VS Code. Als u een wijziging aanbrengt in een van de bestanden, zal de browser u vragen 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 adresbalkpictogramprompt.

De toegang duurt totdat u het laatste tabblad van de oorsprong sluit. Als je vervolgens de app sluit en opnieuw opent, kun je met VS Code doorgaan waar je was gebleven. Wanneer u op Recent openen klikt, biedt VS Code de eerder geopende map aan om opnieuw te openen.

Visual Studio Code biedt de laatst geopende bestanden.

Maar zelfs als u eerder schrijfrechten aan de map hebt verleend, moet u nu opnieuw toegang verlenen. Dit wordt heel snel vermoeiend. Voordat we ingaan op de oplossing, dat wil zeggen permanente machtigingen voor de File System Access API, hoe slaagt VS Code er überhaupt in om recente mappen te 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 (mappen). Beide kunnen worden opgeslagen in IndexedDB , en dit 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 vscode-web-db database te selecteren.

Chrome DevTools debugt Visual Studio Code met de IndexedDB-sectie met de opgeslagen FileSystemHandle.

De nieuwe manier: wat verandert er en wanneer

Chrome lanceert nieuw gedrag waarmee gebruikers optioneel permanente toegang kunnen verlenen tot hun bestanden en mappen, waardoor de noodzaak wordt vermeden om de gebruiker voortdurend opnieuw te vragen. Het nieuwe gedrag kan worden waargenomen vanaf Chrome 122. Om het eerder te testen, vanaf Chrome 120, schakelt u de twee vlaggen chrome://flags/#file-system-access-persistent-permission en chrome://flags/#one-time-permission in chrome://flags/#one-time-permission naar Enabled .

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

Visual Studio Code met drieweg-toestemmingsprompt.

Deze nieuwe driewegprompt heeft de volgende opties:

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

Ten tweede brengt het nieuwe gedrag een nieuwe sectie met zich mee in de site-instellingen, die gebruikers kunnen bereiken via een startpictogram naast de knop Bestand bewerken .

Visual Studio Code-site-instellingen met pictogram voor bestandsbewerking.

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

Chrome-privacy- en beveiligingsinstellingen voor de vscode.dev-site.

Hoe je het nieuwe gedrag kunt triggeren

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

  1. De gebruiker moet tijdens het laatste bezoek aan een origin toestemming hebben verleend aan een bestand of map (of meerdere bestanden of mappen) en de app moet de bijbehorende FileSystemHandle objecten hebben opgeslagen in IndexedDB. Bij het volgende bezoek aan de oorsprong moet de app een van de opgeslagen FileSystemHandle objecten uit IndexedDB hebben opgehaald en vervolgens de FileSystemHandle.requestPermission() -methode hebben aangeroepen. Als aan deze voorwaarden is voldaan, wordt de nieuwe driewegprompt weergegeven.
  2. De oorsprong moet de methode FileSystemHandle.requestPermission() 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 stond. (Het automatisch intrekken van toestemmingen werkt op basis van dezelfde logica als beschreven in het artikel Eenmalige toestemmingen in Chrome .) Als aan deze voorwaarden is voldaan, wordt de nieuwe driewegprompt getoond.
  3. De gebruiker moet de app geïnstalleerd hebben. Geïnstalleerde apps behouden automatisch de machtigingen 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 het tweede geval vermeldt de prompt alle FileSystemHandle objecten waartoe de app eerder toegang had, niet alleen het object waarvoor de methode requestPermission() wordt aangeroepen. In overeenstemming met de manier waarop het werkt bij eenmalige machtigingen : als de gebruiker de prompt meer dan drie keer weigert of negeert, wordt deze niet langer geactiveerd en wordt in plaats daarvan de reguliere toestemmingsprompt weergegeven.

Probeer het nieuwe gedrag

Als u een ondersteunende versie van Chrome heeft of de vereiste vlaggen heeft ingesteld, kunt u het nieuwe gedrag in VS Code op internet testen. Open een map en verleen toegang, sluit vervolgens het tabblad en open het opnieuw en klik op Recent openen (merk op dat onmiddellijk herladen niet werkt om de prompt te activeren, alle tabbladen moeten worden gesloten). Kies de vorige map en de nieuwe prompt wordt weergegeven. Voor een beperktere testcase kun je de demo van Persistent File System Access bekijken en de broncode ervan bekijken .

Conclusies

Permanente machtigingen voor de File System Access API zijn een van de meest gevraagde functies van de API en de implementatiebug is ook zeer populair, waarbij veel ontwikkelaars de hoofdrol spelen. Door deze functie in de handen van ontwikkelaars, en vooral in de handen van gebruikers, te brengen, wordt een belangrijke leemte in de functionaliteit ten opzichte van platformspecifieke apps nu gedicht.

Dankbetuigingen

Dit bericht is beoordeeld door Christine Hollingsworth , Austin Sullivan en Rachel Andrew .