Autorizzazioni permanenti per l'API File System Access

Ora esiste un modo per ottenere l'accesso permanente in lettura e scrittura a file e cartelle senza dover concedere ripetutamente autorizzazioni. Questo post spiega come funziona. Prima di entrare nei dettagli, facciamo un breve riepilogo dello status quo e del problema che viene risolto.

Sfide con il metodo attuale

L'API File System Access consente agli sviluppatori di accedere ai file sul disco rigido locale dell'utente in modalità di lettura e (facoltativamente) di scrittura. Un'app molto conosciuta (tra molte altre) che utilizza questa API è Visual Studio Code (VS Code), l'IDE di Microsoft che viene eseguito direttamente nel browser. Quando apri VS Code, viene visualizzata una schermata Ti diamo il benvenuto in cui puoi creare un nuovo file oppure aprire un file o una cartella esistente.

Schermata di benvenuto di Visual Studio Code.

Se fai clic su Apri cartella e scegli una delle cartelle sul disco rigido, il browser ti chiederà se vuoi che VS Code abbia accesso in visualizzazione alla cartella.

Codice Visual Studio che richiede l'accesso in visualizzazione.

Una volta concesso l'accesso, puoi esplorare la gerarchia delle cartelle e aprire i file nell'editor di VS Code. Se apporti una modifica a uno dei file, il browser ti chiederà se vuoi concedere l'accesso in modifica alla cartella.

Codice Visual Studio che richiede l'accesso in modifica.

Se consenti questa operazione, l'icona del file nella barra degli indirizzi cambia e viene aggiunta una piccola freccia verso il basso, a indicare che l'app dispone delle autorizzazioni di lettura e scrittura. Per modificare le autorizzazioni, fai clic sull'icona, quindi su Rimuovi accesso in modo che l'app non possa più modificare i file.

Visual Studio Code con prompt dell'icona nella barra degli indirizzi.

L'accesso dura fino alla chiusura dell'ultima scheda dell'origine. Se chiudi l'app e la apri di nuovo, VS Code kind of ti consente di continuare da dove avevi interrotto. Quando fai clic su Apri recenti, VS Code ti propone di riaprire la cartella aperta in precedenza.

Codice Visual Studio che offre gli ultimi file aperti.

Ma anche se hai concesso l'autorizzazione di scrittura alla cartella in precedenza, ora devi concedere di nuovo l'accesso. Si tratta di una procedura che si stanca molto rapidamente. Prima di approfondire la soluzione, ovvero le autorizzazioni permanenti per l'API File System Access, in che modo VS Code riesce a ricordare le cartelle recenti?

Codice Visual Studio che richiede l'accesso in modifica dopo il ricaricamento.

Nell'API File System Access, l'accesso a file e cartelle è gestito tramite oggetti FileSystemHandle: oggetti FileSystemFileHandle per i file e FileSystemDirectoryHandle per le cartelle (directory). Entrambi possono essere archiviati in IndexedDB ed è esattamente ciò che fa VS Code. Puoi verificarlo aprendo Chrome DevTools, nella scheda Applicazione vai alla sezione IndexedDB e seleziona la tabella pertinente vscode-filehandles-store nel database vscode-web-db.

Chrome DevTools per il debug del codice Visual Studio che mostra la sezione IndexedDB con il FileSystemHandle archiviato.

Il nuovo modo: che cosa cambia e quando

Chrome sta lanciando un nuovo comportamento per consentire agli utenti di concedere facoltativamente l'accesso permanente ai propri file e alle proprie cartelle, evitando di dover ripetere costantemente la richiesta all'utente. È possibile osservare il nuovo comportamento a partire da Chrome 122. Per testarla in precedenza, a partire da Chrome 120, imposta i due flag chrome://flags/#file-system-access-persistent-permission e chrome://flags/#one-time-permission su Attivato.

In primo luogo, il nuovo comportamento consiste in una nuova richiesta di autorizzazione in tre modalità che, facoltativamente, consente agli utenti di concedere alle app l'accesso ai file e alle cartelle selezionati a ogni visita.

Visual Studio Code con richiesta di autorizzazione a tre vie.

Questo nuovo prompt a tre opzioni include le seguenti opzioni:

  • Consenti questa volta: consente all'app di accedere ai file della sessione corrente. (corrisponde al comportamento esistente).
  • Consenti a ogni visita: consente all'app di avere accesso indefinito a meno che l'accesso non venga revocato. Una volta concesso all'app l'accesso permanente, sarà possibile accedere in modo permanente anche ai file e alle cartelle appena aperti.
  • Non consentire:non consente all'app di accedere ai file. (corrisponde al comportamento esistente).

In secondo luogo, il nuovo comportamento comporta una nuova sezione nelle impostazioni del sito, che gli utenti possono raggiungere tramite un'icona di avvio accanto all'opzione di attivazione/disattivazione Modifica file.

Impostazioni del sito di Visual Studio Code con l'icona di modifica del file.

Questa icona di avvio, quando selezionata, apre le impostazioni Privacy e sicurezza per l'app in questione, dove l'utente vede un elenco di elementi per tutti i file e cartelle a cui ha accesso l'app. L'accesso può essere revocato per ogni singolo elemento facendo clic sull'icona del cestino. Se rimuovi l'accesso per singolo elemento, all'app può comunque essere consentito l'accesso ai file in generale. Per revocare l'accesso in generale, l'utente può fare clic sull'icona nella barra degli indirizzi, come descritto in precedenza.

Impostazioni di privacy e sicurezza di Chrome per il sito vscode.dev.

Come attivare il nuovo comportamento

Non sono state apportate modifiche all'API File System Access per gli sviluppatori. Per attivare il nuovo comportamento con autorizzazioni permanenti, esistono tre modi con precondizioni diverse che devono essere soddisfatte:

  1. L'utente deve aver concesso l'autorizzazione per un file o una cartella (o più file o cartelle) durante l'ultima visita a un'origine e l'app deve aver archiviato gli oggetti FileSystemHandle corrispondenti in IndexedDB. Alla successiva visita all'origine, l'app deve aver recuperato uno degli oggetti FileSystemHandle archiviati da IndexedDB e poi aver chiamato il proprio metodo FileSystemHandle.requestPermission(). Se queste precondizioni vengono soddisfatte, verrà mostrato il nuovo prompt triplo.
  2. L'origine deve aver chiamato il metodo FileSystemHandle.requestPermission() su un FileSystemHandle a cui era stato concesso l'accesso in precedenza, ma il cui accesso è stato revocato automaticamente perché la scheda è stata sottoposta a background per un po' di tempo. La revoca automatica delle autorizzazioni funziona in base alla stessa logica descritta nell'articolo Autorizzazioni una tantum in Chrome. Se queste precondizioni sono soddisfatte, verrà mostrato il nuovo prompt triplo.
  3. L'utente deve avere installato l'app. Le app installate continueranno a essere autorizzate una volta che l'utente concederà l'accesso. In questo caso, non verrà mostrata la richiesta in tre parti, ma l'app riceve il nuovo comportamento per impostazione predefinita.

Nel primo e nel secondo caso, il prompt elenca tutti gli oggetti FileSystemHandle a cui l'app aveva accesso in precedenza, non solo quello per cui viene chiamato il metodo requestPermission(). Se l'utente nega o ignora la richiesta più di tre volte in base al modo in cui funziona nelle autorizzazioni una tantum, la richiesta non si attiverà più e verrà visualizzata la normale richiesta di autorizzazione.

Prova il nuovo comportamento

Se disponi di una versione che supporta Chrome o hai impostato i flag richiesti, puoi testare il nuovo comportamento in VS Code sul web. Apri una cartella e concedi l'accesso, quindi chiudi la scheda e riaprila e fai clic su Apri recente (tieni presente che il ricaricamento immediato non funziona per attivare la richiesta, quindi devi chiudere tutte le schede). Scegliendo la cartella precedente, verrà visualizzato il nuovo prompt. Per uno scenario di test più ridotto, guarda la demo per l'accesso al file system permanente e controlla il codice sorgente.

Conclusioni

Le autorizzazioni permanenti per l'API File System Access sono una delle funzionalità più richieste dell'API e anche il bug di implementazione è molto popolare, ed è seguito da molti sviluppatori. Portando questa funzionalità nelle mani degli sviluppatori, e soprattutto nelle mani degli utenti, si colma un'importante lacuna rispetto alle app specifiche della piattaforma.

Riconoscimenti

Questo post è stato esaminato da Christine Hollingsworth, Austin Sullivan e Rachel Andrew.