File System Access API için kalıcı izinler

Artık tekrar tekrar izin vermek zorunda kalmadan dosya ve klasörlere kalıcı okuma ve yazma erişimi elde etmenin bir yolu var. Bu yayında, özelliğin işleyiş şekli açıklanmaktadır. Ayrıntılara girmeden önce statüko ve çözülürken yaşanan sorunu kısaca özetleyin.

Mevcut yöntemle karşılaşılan zorluklar

File System Access API, geliştiricilerin kullanıcının yerel sabit diskindeki dosyalara okuma ve (isteğe bağlı olarak) yazma yöntemiyle erişmesine olanak tanır. Bu API'yi kullanan birçok popüler uygulama arasında, Microsoft'un doğrudan tarayıcıda çalışan IDE'si Visual Studio Code (VS Code) yer alır. VS Code'u açtığınızda yeni bir dosya oluşturabileceğiniz veya mevcut bir dosyayı ya da klasörü açabileceğiniz Karşılama ekranıyla karşılaşırsınız.

Visual Studio Code'un karşılama ekranı.

Klasörü Aç'ı tıklar ve sabit diskinizdeki klasörlerden birini seçerseniz tarayıcı, VS Code'un bu klasör için görüntüleme erişimine sahip olmasını isteyip istemediğinizi sorar.

Visual Studio Kodu görüntüleme erişimi istiyor.

Erişim izni verdikten sonra klasör hiyerarşisinde gezinebilir ve dosyaları VS Code'un düzenleyicisinde açabilirsiniz. Dosyalardan herhangi birinde değişiklik yaparsanız tarayıcı, klasöre düzenleme erişimi vermek isteyip istemediğinizi sorar.

Visual Studio Code düzenleme erişimi istiyor.

Buna izin verirseniz adres çubuğundaki dosya simgesi değişir ve uygulamanın okuma ve yazma izinlerine sahip olduğunu belirten küçük bir aşağı ok eklenir. İzinleri değiştirmek için simgeyi ve ardından Erişimi kaldır'ı tıklayın. Böylece, uygulama artık dosyaları düzenleyemez.

Adres çubuğu simgesi istemi içeren Visual Studio Code.

Erişim, kaynaktaki son sekmeyi kapatana kadar devam eder. Sonra uygulamayı kapatıp tekrar açarsanız, VS Code tür, kaldığınız yerden devam edebilmenizi sağlar. Son Dosyayı Aç'ı tıkladığınızda VS Code, daha önce açılmış olan klasörü yeniden açılmak için sunar.

Son açılan dosyaları sunan Visual Studio Kodu.

Ancak daha önce klasöre yazma izni vermiş olsanız bile şimdi tekrar erişim vermeniz gerekir. Bu da çok çabuk yoruyor. Çözümü, yani File System Access API için kalıcı izinleri öğrenmeden önce VS Code, son klasörleri hatırlamayı nasıl başarıyor?

Visual Studio Kodu, yeniden yükleme sonrasında düzenleme erişimi istiyor.

File System Access API'de dosyalara ve klasörlere erişim FileSystemHandle nesneleri aracılığıyla yönetilir: FileSystemFileHandle dosyalar için nesneler ve FileSystemDirectoryHandle klasörler (dizinler). Her ikisi de IndexedDB'de depolanabilir. VS Code'un işlevi tam olarak budur. Bunu görmek için Chrome Geliştirici Araçları'nı açın, Uygulama sekmesinde IndexedDB bölümüne gidin ve vscode-web-db veritabanında ilgili tabloyu (vscode-filehandles-store) seçin.

Chrome Geliştirici Araçları, depolanan FileSystemHandle'ın yer aldığı IndexedDB bölümünü gösteren Visual Studio kodunda hata ayıklama işlemi yapıyor.

Yeni yöntem: Nelerin ne zaman değiştiği

Chrome, sürekli olarak kullanıcıdan tekrar izin isteme ihtiyacını ortadan kaldırarak kullanıcıların isteğe bağlı olarak dosya ve klasörlerine kalıcı erişim vermelerine olanak tanıyan yeni bir davranış sunmaktadır. Bu yeni davranış, Chrome 122 sürümünden itibaren gözlemlenebilir. Özelliği daha önce test etmek için Chrome 120 sürümünden itibaren chrome://flags/#file-system-access-persistent-permission ve chrome://flags/#one-time-permission işaretlerini Etkin olarak değiştirin.

Öncelikle, yeni davranış yeni bir üç yönlü izin isteminden oluşur. Bu istemde kullanıcılar isteğe bağlı olarak her ziyarette uygulamalara belirli dosya ve klasörlere erişim izni verebilir.

Üç yönlü izin istemi içeren Visual Studio Code.

Bu yeni üç yönlü istemde aşağıdaki seçenekler yer alır:

  • Bu defalık izin ver: Uygulamanın, geçerli oturuma ait dosyalara erişmesine izin verir. (Bu, mevcut davranışa karşılık gelir.)
  • Her ziyarette izin ver: Erişim iptal edilmediği sürece uygulamaya süresiz erişim izni verir. Uygulamaya kalıcı erişim izni verildikten sonra, yeni açılan dosya ve klasörlere de kalıcı olarak erişilebilir.
  • İzin verme: Uygulamanın dosyalara erişmesine izin vermez. (Bu, mevcut davranışa karşılık gelir.)

İkincisi, bu yeni davranış için site ayarlarında yeni bir bölüm söz konusu. Kullanıcılar bu bölüme Dosya düzenleme açma/kapatma düğmesinin yanındaki başlat simgesinden erişebilecek.

Dosya düzenleme simgesiyle Visual Studio Code site ayarları.

Bu başlatma simgesi tıklandığında, söz konusu uygulamanın Gizlilik ve güvenlik ayarları açılır. Burada kullanıcıya, uygulamanın erişebildiği tüm dosyalara ve klasörlere ait öğelerin listesi gösterilir. Erişim, çöp kutusu simgesi tıklanarak öğe bazında iptal edilebilir. Her öğe için erişimi kaldırmak, uygulamaya genel olarak dosyalara erişim izni verilebileceği anlamına gelir. Genel olarak erişimi iptal etmek için kullanıcı, daha önce açıklandığı gibi adres çubuğundaki simgeyi tıklayabilir.

vscode.dev sitesi için Chrome gizlilik ve güvenlik ayarları.

Yeni davranışı tetikleme

File System Access API'de geliştiricilerin karşılaştığı herhangi bir değişiklik yoktur. Kalıcı izinlerle yeni davranışı tetiklemek için karşılanması gereken farklı ön koşulların üç yolu vardır:

  1. Kullanıcının bir kaynağa son ziyaretinde bir dosyaya veya klasöre (ya da birden çok dosyaya ya da klasöre) izin vermiş olması ve uygulamanın, ilgili FileSystemHandle nesnelerini IndexedDB'de depolamış olması gerekir. Kaynak bir sonraki ziyarette, uygulama IndexedDB'den depolanan FileSystemHandle nesnelerinden herhangi birini almış ve ardından FileSystemHandle.requestPermission() yöntemini çağırmış olmalıdır. Bu ön koşullar karşılanırsa yeni üç yönlü istem gösterilir.
  2. Kaynak daha önce erişim verilen bir FileSystemHandle üzerinde FileSystemHandle.requestPermission() yöntemini çağırmış, ancak sekme bir süredir arka planda kaldığı için erişimi otomatik olarak iptal edilmiş olmalıdır. (Otomatik izin iptali, Chrome'da tek seferlik izinler makalesinde açıklanan mantıkla çalışır.) Bu ön koşullar karşılanırsa yeni üç yönlü istem gösterilir.
  3. Kullanıcı uygulamayı yüklemiş olmalıdır. Kullanıcı erişim izni verdikten sonra yüklü uygulamalar izinleri otomatik olarak kullanmaya devam eder. Bu durumda, üç yönlü istem gösterilmez bunun yerine uygulama varsayılan olarak yeni davranışı alır.

Birinci ve ikinci örnekte istem, yalnızca requestPermission() yönteminin çağrıldığı nesneyi değil, uygulamanın daha önce erişebildiği tüm FileSystemHandle nesneleri listeler. Tek seferlik izinlerdeki işleyiş şekline uyulduğunda, kullanıcı istemi üç defadan fazla reddeder veya reddederse artık tetiklenmez ve bunun yerine normal izin istemi gösterilir.

Yeni davranışı deneyin

Chrome'un destekleyen bir sürümüne sahipseniz veya gerekli işaretleri ayarladıysanız yeni davranışı web'deki VS Code'da test edebilirsiniz. Bir klasör açıp erişim izni verin, ardından sekmeyi kapatıp yeniden açın ve Şu ankini aç'ı tıklayın (hemen yeniden yüklemenin istemi tetiklemek için çalışmayacağını, tüm sekmelerin kapatılması gerektiğini unutmayın). Önceki klasörü seçtiğinizde yeni komut istemi görüntülenir. Daha düşük bir test durumu için Kalıcı Dosya Sistemi Erişimi demosuna göz atın ve kaynak koduna göz atın.

Sonuçlar

File System Access API için kalıcı izinler, API'nin en çok istenen özelliklerinden biridir. Uygulama hatası da son derece popülerdir ve birçok geliştirici bu hataya başlanmıştır. Bu özelliğin geliştiricilerin ve en önemlisi de kullanıcıların ellerine teslim edilmesiyle, platforma özgü uygulamalarla karşılaştırıldığında önemli bir özellik açığı kapatılmıştır.

Tasdik

Bu yayın Christine Hollingsworth, Austin Sullivan ve Rachel Andrew tarafından incelendi.