Trwałe uprawnienia do interfejsu File System Access API

Teraz możesz uzyskać stały dostęp do odczytu i zapisu do plików i folderów bez konieczności wielokrotnego przyznawania uprawnień. Z tego artykułu dowiesz się, jak to działa. Zanim przejdziemy do szczegółów, przypomnijmy sobie obecną sytuację i rozwiązany problem.

Problemy z obecną metodą

Interfejs File System Access API umożliwia deweloperom odczytywanie i (opcjonalnie) zapisywanie plików na lokalnym dysku twardym użytkownika. Jedną z popularnych aplikacji (wśród wielu innych), która korzysta z tego interfejsu API, jest Visual Studio Code (VS Code), środowisko programistyczne Microsoftu, które działa bezpośrednio w przeglądarce. Po otwarciu VS Code zobaczysz ekran powitalny, na którym możesz utworzyć nowy plik lub otworzyć istniejący plik lub folder.

Ekran powitalny Visual Studio Code.

Jeśli klikniesz Otwórz folder i wybierzesz jeden z folderów na dysku twardym, przeglądarka zapyta, czy chcesz, aby VS Code miał dostęp do odczytu tego folderu.

Visual Studio Code prosi 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 wprowadzisz zmiany w jakimkolwiek pliku, przeglądarka zapyta, czy chcesz przyznać folderowi uprawnienia edytowania.

Visual Studio Code prosi o uprawnienia do edycji

Jeśli zezwolisz na to, ikona pliku na pasku adresu zmieni się, a dodatkowo pojawi się mała strzałka w dół, co oznacza, ż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.

Ikona paska adresu w Visual Studio Code

Dostęp będzie trwał do zamknięcia ostatniej karty w źródle. Jeśli zamkniesz aplikację i otworzysz ją ponownie, VS Code trochę pozwoli Ci kontynuować od miejsca, w którym przerwano pracę. Po kliknięciu Otwórz ostatnio VS Code wyświetli ostatnio otwarty folder.

Visual Studio Code z ostatnio otwartymi plikami.

Nawet jeśli wcześniej przyznałeś uprawnienia do zapisu w tym folderze, musisz je przyznać ponownie. To bardzo szybko staje się męczące. Zanim przejdziemy do rozwiązania, czyli trwałych uprawnień do interfejsu File System Access API, zastanówmy się, jak VS Code w ogóle zapamiętuje ostatnio używane 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: FileSystemFileHandleobiektów plików i FileSystemDirectoryHandleobiektów folderów (katalogów). Oba te elementy można zapisać w IndexedDB, co właśnie robi VS Code. Aby to sprawdzić, otwórz DevTools w Chrome, na karcie Aplikacja przejdź do sekcji IndexedDB i w bazie danych vscode-web-db wybierz odpowiednią tabelę vscode-filehandles-store.

Narzędzia dla deweloperów w Chrome do debugowania Visual Studio Code pokazujące sekcję IndexedDB z przechowywanym FileSystemHandle.

Nowy sposób: co się zmienia i kiedy

Chrome wprowadza nowe zachowanie, które pozwala użytkownikom opcjonalnie przyznać stały dostęp do plików i folderów, dzięki czemu nie trzeba będzie ciągle wyświetlać prośby o pozwolenie. Nowe zachowanie można zaobserwować od wersji Chrome 122. Aby przetestować tę funkcję wcześniej, od wersji Chrome 120 ustaw 2 flagi chrome://flags/#file-system-access-persistent-permissionchrome://flags/#one-time-permission na Włączone.

Po pierwsze, nowe zachowanie obejmuje nowe 3-stopniowe okno z prośbą o przyznanie uprawnień, które umożliwia użytkownikom opcjonalne przyznawanie aplikacjom dostępu do wybranych plików i folderów przy każdej wizycie.

Visual Studio Code z trzystopniowym prośbą o uprawnienia.

Ta nowa prośba z 3 opcjami zawiera te opcje:

  • Zezwól tym razem: aplikacja może mieć dostęp do plików w ramach bieżącej sesji. (odpowiada to obecnemu działaniu).
  • Zezwalaj przy każdej wizycie:aplikacja ma nieograniczony dostęp, dopóki nie cofniesz uprawnień. Gdy aplikacji zostanie przyznany trwały dostęp, nowo otwarte pliki i foldery będą też dostępne na stałe.
  • Nie zezwalaj:uniemożliwia aplikacji dostęp do plików. (odpowiada to obecnemu działaniu).

Po drugie, nowe działanie obejmuje nową sekcję w ustawieniach witryny, do której użytkownicy mogą przejść, klikając ikonę obok przełącznika Edycja pliku.

Ustawienia witryny Visual Studio Code z ikoną edycji pliku.

Po kliknięciu tej ikony uruchamiającej otwierają się ustawienia Prywatność i bezpieczeństwo dotyczące danej aplikacji, w których użytkownik widzi listę wszystkich plików i folderów, do których aplikacja ma dostęp. Dostęp można cofnąć w przypadku poszczególnych elementów, klikając ikonę kosza. Usunięcie dostępu do poszczególnych elementów oznacza, że aplikacji można nadal przyznać dostęp do plików w ogóle. Aby cofnąć ogólny dostęp, użytkownik może kliknąć ikonę na pasku adresu, jak opisano wcześniej.

Ustawienia prywatności i zabezpieczeń w Chrome dotyczące witryny vscode.dev.

Jak wywołać nowe działanie

Interfejs File System Access API nie ulegnie zmianie w zakresie widocznym dla deweloperów. Aby wywołać nowe zachowanie z trwałymi uprawnieniami, możesz użyć 1 z 3 sposobów, które różnią się wymaganiami wstępnymi:

  1. Podczas ostatniej wizyty w źródle użytkownik musi przyznać uprawnienia do pliku lub folderu (lub wielu plików lub folderów), a aplikacja musi zapisać odpowiednie obiekty FileSystemHandle w IndexedDB. Podczas następnej wizyty w źródle aplikacja musi pobrać z IndexedDB dowolny z przechowywanych obiektów FileSystemHandle, a następnie wywołać metodę FileSystemHandle.requestPermission(). Jeśli te warunki wstępne są spełnione, wyświetli się nowy komunikat z 3 opcjami.
  2. Źródło musi wywołać metodę FileSystemHandle.requestPermission() w obiekcie FileSystemHandle, do którego wcześniej przyznano dostęp, ale który został automatycznie odłączony, ponieważ karta była przez jakiś czas w tle. (automatyczne cofanie uprawnień działa zgodnie z tą samą logiką, co opisano w artykule Uprawnienia jednorazowe w Chrome). Jeśli te warunki wstępne są spełnione, wyświetli się nowy komunikat z treścią.
  3. Użytkownik musi mieć zainstalowaną aplikację. Zainstalowane aplikacje automatycznie zachowają uprawnienia, gdy użytkownik przyzna dostęp. W takim przypadku nie wyświetli się prośba o trzy opcje, a zamiast tego aplikacja automatycznie zastosuje nowe zachowanie.

W pierwszym i drugim przypadku w wyświetleniu znajdują się wszystkie FileSystemHandleobiekty, do których aplikacja miała wcześniej dostęp, a nie tylko ten, do którego wywoływana jest metoda requestPermission(). Zgodnie z zasadami dotyczącymi jednorazowych uprawnień, jeśli użytkownik odmówi lub zamknie prośbę więcej niż 3 razy, prośba nie będzie się już wyświetlać, a zamiast niej pojawi się zwykła prośba o uprawnienia.

Wypróbuj nowe zachowanie

Jeśli masz wersję Chrome, która obsługuje tę funkcję, lub masz ustawione wymagane flagi, możesz przetestować nowe zachowanie w VS Code w internecie. Otwórz folder i przyznaj dostęp, a następnie zamknij kartę i otwórz ją ponownie. Kliknij Otwórz ostatnio (pamiętaj, że natychmiastowe ponowne załadowanie nie powoduje wyświetlenia monitu, ponieważ wszystkie karty muszą być zamknięte). Wybierz poprzedni folder, a pojawi się nowy komunikat. Aby uzyskać bardziej ograniczony przypadek testowy, zapoznaj się z demo dostępu do trwałego systemu plikówsprawdzidŹ jego kod źródłowy.

Podsumowanie

Trwałe uprawnienia do interfejsu File System API to jedna z najbardziej pożądanych funkcji tego interfejsu API, a błąd implementacji jest bardzo popularny wśród wielu programistów. Udostępnienie tej funkcji deweloperom, a przede wszystkim użytkownikom, pozwoliło zniwelować istotną lukę w funkcjonalności w porównaniu z aplikacją na daną platformę.

Podziękowania

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