Trwałe uprawnienia do interfejsu File System Access API

Obecnie można uzyskać stały dostęp do plików i folderów z uprawnieniami do odczytu i zapisu bez konieczności wielokrotnego przyznawania uprawnień. Ten post wyjaśnia, jak to działa. Zanim przejdziemy do szczegółów, krótko podsumujmy obecną sytuację i rozwiązany problem.

Wyzwania związane z bieżącą metodą

Interfejs File System Access API umożliwia programistom uzyskiwanie dostępu do plików na lokalnym dysku twardym użytkownika w sposób umożliwiający ich odczyt i (opcjonalnie) zapisywanie. Jedną z wielu innych popularnych aplikacji, które korzystają z tego interfejsu API, jest Visual Studio Code (VS Code) – IDE firmy Microsoft, które działa bezpośrednio w przeglądarce. Po otwarciu VS Code wyświetli się ekran powitalny, na którym możesz utworzyć nowy plik lub otworzyć istniejący plik lub folder.

Ekran powitalny narzędzia Visual Studio Code.

Jeśli klikniesz Otwórz folder i wybierzesz jeden z folderów na dysku twardym, przeglądarka zapyta, czy chcesz, by program VS Code miał uprawnienia do wyświetlania tego folderu.

Visual Studio Code z prośbą o uprawnienia do wyświetlania.

Po przyznaniu dostępu możesz poruszać się po hierarchii folderów i otwierać pliki w edytorze VS Code. Jeśli zmodyfikujesz dowolny plik, przeglądarka zapyta, czy chcesz przyznać mu uprawnienia do edycji.

Visual Studio Code z prośbą o uprawnienia do edycji.

Jeśli na to zezwolisz, zmieni się ikona pliku na pasku adresu i doda się mała strzałka w dół, która będzie wskazywać, że aplikacja ma uprawnienia do odczytu i zapisu. Aby zmienić uprawnienia, kliknij ikonę, a następnie Usuń dostęp, aby aplikacja nie mogła już edytować plików.

Visual Studio Code z ikoną promptu na pasku adresu.

Dostęp będzie możliwy do momentu zamknięcia ostatniej karty w źródle. Jeśli potem zamkniesz aplikację i otworzysz ją ponownie, VS Code rodzajd pozwoli Ci kontynuować od tego samego miejsca. Gdy klikniesz Otwórz ostatnie, VS Code proponuje ponowne otwarcie otwartego folderu.

Visual Studio Code z ostatnio otwartymi plikami.

Ale nawet jeśli wcześniej przyznano folderowi uprawnienia do zapisu, teraz musisz ponownie przyznać dostęp. Szybko się to męczy. Przed zagłębieniem się w rozwiązanie, czyli zapewnienie trwałych uprawnień dla interfejsu File System Access API, w jaki sposób VS Code w ogóle udaje się zapamiętywać ostatnie foldery?

Visual Studio Code prosi o uprawnienia do edycji po ponownym załadowaniu.

W interfejsie File System Access API dostępem do plików i folderów zarządza się za pomocą obiektów FileSystemHandle: FileSystemFileHandle obiektów plików i FileSystemDirectoryHandle obiektów folderów (katalogów). Oba typy można przechowywać w IndexedDB i to właśnie robi VS Code. Aby to sprawdzić, otwórz Narzędzia deweloperskie w Chrome, na karcie Aplikacja przejdź do sekcji IndexedDB i wybierz odpowiednią tabelę vscode-filehandles-store w bazie danych vscode-web-db.

Wizualizacja kodu Studio w Chrome DevTools pokazująca sekcję IndexedDB z zapisanym obiektem FileSystemHandle

Nowy sposób: co się zmieni i kiedy

Wprowadzamy w Chrome nowe działanie, które umożliwia użytkownikom opcjonalnie przyznawanie stałego dostępu do ich plików i folderów, dzięki czemu nie muszą oni ciągle prosić użytkownika o zgodę. Nowy sposób działania można zaobserwować od wersji Chrome 122. Aby przetestować go wcześniej, od Chrome 120 przełącz 2 flagi chrome://flags/#file-system-access-persistent-permission i chrome://flags/#one-time-permission na Włączone.

Po pierwsze, nowe zachowanie składa się z nowego 3-kierunkowego pytania o przyznanie uprawnień, które opcjonalnie pozwala użytkownikom przyznawać aplikacjom dostęp do wybranych plików i folderów przy każdej wizycie.

Visual Studio Code z trójkierunkową prośbą o przyznanie uprawnień.

Ten nowy trójkierunkowy prompt ma następujące opcje:

  • Zezwól tym razem:umożliwia aplikacji dostęp do plików z bieżącej sesji. (odpowiada to dotychczasowym zachowaniu).
  • Zezwalaj przy każdej wizycie:zezwala aplikacji na nieograniczony dostęp do danych, chyba że zostanie unieważniony. Gdy zostanie przyznany stały dostęp, nowo otwarte pliki i foldery również będą bezterminowo dostępne.
  • Nie zezwalaj: nie pozwala aplikacji na dostęp do plików. Odpowiada to dotychczasowemu zachowaniu.

Po drugie, nowy sposób działania wymaga utworzenia nowej sekcji w ustawieniach witryny, do której użytkownicy mogą przejść, klikając ikonę uruchamiania obok przełącznika Edytowanie pliku.

Ustawienia witryny Visual Studio Code z ikoną edytowania plików.

Kliknięcie tej ikony uruchamiania powoduje otwarcie ustawień prywatności i bezpieczeństwa danej aplikacji, gdzie użytkownik widzi listę elementów wszystkich plików i folderów, do których aplikacja ma dostęp. Dostęp można anulować z poszczególnych elementów, klikając ikonę kosza. Usunięcie dostępu do poszczególnych elementów oznacza, że nadal można przyznawać aplikacji dostęp do plików. Aby ogólnie odebrać dostęp, użytkownik może kliknąć ikonę na pasku adresu, jak opisano wcześniej.

Ustawienia prywatności i bezpieczeństwa w Chrome na stronie vscode.dev.

Jak wywołać nowe zachowanie

Nie wprowadziliśmy żadnych zmian dla programistów dotyczących interfejsu File System Access API. Aby aktywować nowe działanie z użyciem trwałych uprawnień, należy spełnić 3 warunki z różnymi warunkami wstępnymi:

  1. Użytkownik musi przyznać uprawnienia do pliku lub folderu (albo wielu plików lub folderów) podczas ostatniej wizyty w źródle, a aplikacja musi zapisać odpowiednie obiekty FileSystemHandle w IndexedDB. Podczas następnej wizyty w źródle aplikacja musi pobrać z IndexedDB dowolny z zapisanych obiektów FileSystemHandle, a następnie wywołać swoją metodę FileSystemHandle.requestPermission(). Jeśli te warunki wstępne zostaną spełnione, wyświetli się nowy 3-kierunkowy prompt.
  2. Źródło musi wywołać metodę FileSystemHandle.requestPermission() na elemencie FileSystemHandle, któremu wcześniej przyznano dostęp, ale którego dostęp został automatycznie unieważniony z powodu działania karty w tle przez jakiś czas. Automatyczne unieważnianie uprawnień działa zgodnie z opisem w artykule Jednorazowe uprawnienia w Chrome. Jeśli te warunki wstępne zostaną spełnione, wyświetli się nowy 3-kierunkowy komunikat.
  3. Użytkownik musi mieć zainstalowaną aplikację. Zainstalowane aplikacje automatycznie zachowają uprawnienia, gdy użytkownik przyzna do niej dostęp. W takim przypadku 3-kierunkowy prompt nie będzie wyświetlany, a aplikacja będzie domyślnie korzystać z nowego działania.

W pierwszym i drugim przypadku prompt zawiera listę wszystkich obiektów FileSystemHandle, do których aplikacja miała wcześniej dostęp, a nie tylko tych, do których jest wywoływana metoda requestPermission(). Podobnie jak w przypadku sposobu, w jaki działa jednorazowe uprawnienia, jeśli użytkownik odmówi lub odrzuci prośbę więcej niż 3 razy, nie będzie dłużej aktywować alertu. Zamiast tego wyświetla się zwykły komunikat o przyznaniu uprawnień.

Wypróbuj nowe działanie

Jeśli masz obsługiwaną wersję Chrome lub masz ustawione wymagane flagi, możesz przetestować nowe zachowanie w VS Code w internecie. Otwórz folder i przyznaj do niego dostęp, a następnie zamknij kartę i otwórz ją ponownie, a następnie kliknij Otwórz ostatnie (pamiętaj, że natychmiastowe ponowne załadowanie nie wystarczy w przypadku wyświetlenia promptu, ponieważ wszystkie karty muszą być zamknięte). Wybierz poprzedni folder, a zobaczysz nowy prompt. Aby ograniczyć liczbę przypadków testowych, użyj demonstracji dostępu stałego do systemu plików i sprawdź jej kod źródłowy.

Podsumowanie

Stałe uprawnienia interfejsu File System Access API to jedna z najczęściej żądanych funkcji tego interfejsu API. Bardzo popularny jest też błąd implementacji. Wielu deweloperów go oznacza. Dzięki udostępnieniu tej funkcji deweloperom, a przede wszystkim użytkownikom, zamknąliśmy ważną lukę w funkcji w porównaniu z aplikacjami na poszczególnych platformach.

Poświadczenia

Ten post został zweryfikowany przez Christine Hollingsworth, Austin Sullivan i Rachel Andrew.