Quyền lâu dài cho API Truy cập hệ thống tệp

Giờ đây, bạn có thể truy cập liên tục vào các tệp và thư mục để đọc và ghi mà không cần cấp quyền nhiều lần. Bài đăng này giải thích cách hoạt động của tính năng này. Trước khi đi vào chi tiết, hãy tóm tắt nhanh tình hình hiện tại và vấn đề cần giải quyết.

Thách thức với phương pháp hiện tại

File System Access API cho phép nhà phát triển truy cập vào các tệp trên ổ cứng cục bộ của người dùng theo cách đọc và (không bắt buộc) ghi. Một ứng dụng phổ biến (trong số nhiều ứng dụng khác) sử dụng API này là Visual Studio Code (VS Code), IDE của Microsoft chạy trực tiếp trong trình duyệt. Khi mở VS Code, bạn sẽ thấy màn hình Chào mừng. Tại đây, bạn có thể tạo tệp mới hoặc mở tệp hoặc thư mục hiện có.

Màn hình chào mừng của Visual Studio Code.

Nếu bạn nhấp vào Mở thư mục và chọn một trong các thư mục trên ổ cứng, thì trình duyệt sẽ hỏi bạn có muốn VS Code có quyền xem thư mục này hay không.

Visual Studio Code yêu cầu quyền xem.

Sau khi cấp quyền truy cập, bạn có thể di chuyển trong hệ phân cấp thư mục và mở các tệp trong trình chỉnh sửa của VS Code. Nếu bạn sửa đổi bất kỳ tệp nào, trình duyệt sẽ hỏi bạn có muốn cấp quyền chỉnh sửa cho thư mục hay không.

Visual Studio Code yêu cầu quyền chỉnh sửa.

Nếu bạn cho phép, biểu tượng tệp trên thanh địa chỉ sẽ thay đổi và một mũi tên xuống nhỏ sẽ được thêm vào, cho biết rằng ứng dụng có quyền đọc và ghi. Để thay đổi quyền, hãy nhấp vào biểu tượng rồi nhấp vào Xoá quyền truy cập để ứng dụng không thể chỉnh sửa tệp nữa.

Visual Studio Code có lời nhắc biểu tượng thanh địa chỉ.

Quyền truy cập sẽ kéo dài cho đến khi bạn đóng thẻ cuối cùng của nguồn gốc. Nếu sau đó bạn đóng ứng dụng rồi mở lại, VS Code sẽ cho phép bạn tiếp tục từ nơi bạn đã dừng lại. Khi bạn nhấp vào Open Recent (Mở gần đây), VS Code sẽ đề xuất thư mục đã mở trước đó để bạn mở lại.

Visual Studio Code cung cấp các tệp đã mở gần đây nhất.

Nhưng ngay cả khi đã cấp quyền ghi cho thư mục trước đó, giờ đây, bạn cần cấp lại quyền truy cập. Việc này rất nhanh gây mệt mỏi. Trước khi đi sâu vào giải pháp, tức là quyền liên tục cho API Truy cập hệ thống tệp, làm cách nào mà VS Code có thể nhớ các thư mục gần đây?

Visual Studio Code yêu cầu quyền chỉnh sửa sau khi tải lại.

Trong File System Access API, quyền truy cập vào các tệp và thư mục được quản lý thông qua các đối tượng FileSystemHandle: các đối tượng FileSystemFileHandle cho tệp và các đối tượng FileSystemDirectoryHandle cho thư mục. Cả hai đều có thể được lưu trữ trong IndexedDB và đây chính xác là những gì VS Code làm. Bạn có thể thấy điều này bằng cách mở Công cụ cho nhà phát triển của Chrome, trên thẻ Ứng dụng, hãy chuyển đến phần IndexedDB và chọn bảng vscode-filehandles-store có liên quan trong cơ sở dữ liệu vscode-web-db.

Gỡ lỗi Chrome DevTools Visual Studio Code cho thấy phần IndexedDB có FileSystemHandle được lưu trữ.

Cách mới: nội dung thay đổi và thời điểm áp dụng

Chrome đang triển khai hành vi mới để cho phép người dùng tuỳ ý cấp quyền truy cập vĩnh viễn vào tệp và thư mục của họ, tránh việc phải liên tục nhắc lại người dùng. Bạn có thể thấy hành vi mới này kể từ Chrome 122. Để kiểm thử sớm, bắt đầu từ Chrome 120, hãy bật/tắt 2 cờ chrome://flags/#file-system-access-persistent-permissionchrome://flags/#one-time-permission thành Enabled (Đã bật).

Trước tiên, hành vi mới bao gồm một lời nhắc cấp quyền mới theo 3 cách, cho phép người dùng cấp cho ứng dụng quyền truy cập vào các tệp và thư mục đã chọn trong mỗi lần truy cập.

Visual Studio Code có lời nhắc cấp quyền ba chiều.

Lời nhắc mới gồm 3 lựa chọn này có các lựa chọn sau:

  • Cho phép truy cập trong thời gian này: Cho phép ứng dụng truy cập vào các tệp trong phiên hiện tại. (Điều này tương ứng với hành vi hiện tại.)
  • Cho phép mỗi lần truy cập: Cho phép ứng dụng có quyền truy cập vô thời hạn, trừ phi quyền truy cập bị thu hồi. Sau khi được cấp quyền truy cập liên tục, ứng dụng cũng sẽ có thể truy cập liên tục vào các tệp và thư mục mới mở.
  • Không cho phép: Không cho phép ứng dụng truy cập vào tệp. (Điều này tương ứng với hành vi hiện có.)

Thứ hai, hành vi mới này sẽ có một phần mới trong phần cài đặt trang web. Người dùng có thể truy cập vào phần này thông qua biểu tượng khởi chạy bên cạnh nút bật/tắt Chỉnh sửa tệp.

Chế độ cài đặt trang web của Visual Studio Code có biểu tượng chỉnh sửa tệp.

Khi nhấp vào biểu tượng khởi chạy này, người dùng sẽ mở phần cài đặt Quyền riêng tư và bảo mật cho ứng dụng có liên quan, nơi người dùng thấy danh sách các mục cho tất cả tệp và thư mục mà ứng dụng có quyền truy cập. Bạn có thể thu hồi quyền truy cập cho từng mục bằng cách nhấp vào biểu tượng thùng rác. Việc xoá quyền truy cập theo từng mục có nghĩa là ứng dụng vẫn có thể được cấp quyền truy cập vào các tệp nói chung. Để thu hồi quyền truy cập nói chung, người dùng có thể nhấp vào biểu tượng trên thanh địa chỉ như mô tả trước đó.

Chế độ cài đặt quyền riêng tư và bảo mật của Chrome cho trang web vscode.dev.

Cách kích hoạt hành vi mới

API Truy cập hệ thống tệp không có thay đổi nào đối với nhà phát triển. Để kích hoạt hành vi mới bằng các quyền duy trì, có 3 cách với các điều kiện tiên quyết khác nhau cần đáp ứng:

  1. Người dùng phải cấp quyền cho một tệp hoặc thư mục (hoặc nhiều tệp hoặc thư mục) trong lần truy cập gần đây nhất vào một nguồn và ứng dụng phải lưu trữ các đối tượng FileSystemHandle tương ứng trong IndexedDB. Trong lần truy cập tiếp theo vào nguồn gốc, ứng dụng phải truy xuất một trong các đối tượng FileSystemHandle đã lưu trữ từ IndexedDB, sau đó gọi phương thức FileSystemHandle.requestPermission() của đối tượng đó. Nếu đáp ứng các điều kiện tiên quyết này, lời nhắc ba chiều mới sẽ xuất hiện.
  2. Nguồn gốc phải gọi phương thức FileSystemHandle.requestPermission() trên FileSystemHandle mà trước đây đã được cấp quyền truy cập, nhưng quyền truy cập đó đã tự động bị thu hồi do thẻ bị chuyển xuống nền trong một thời gian. (Tính năng tự động thu hồi quyền hoạt động dựa trên cùng một logic như mô tả trong bài viết Quyền dùng một lần trong Chrome.) Nếu đáp ứng các điều kiện tiên quyết này, lời nhắc mới gồm 3 lựa chọn sẽ xuất hiện.
  3. Người dùng phải cài đặt ứng dụng. Các ứng dụng đã cài đặt sẽ tự động duy trì quyền sau khi người dùng cấp quyền truy cập. Trong trường hợp này, lời nhắc ba chiều sẽ không xuất hiện, thay vào đó, ứng dụng sẽ có hành vi mới theo mặc định.

Trong trường hợp thứ nhất và thứ hai, lời nhắc liệt kê tất cả các đối tượng FileSystemHandle mà ứng dụng đã từng truy cập, chứ không chỉ đối tượng mà phương thức requestPermission() đang được gọi. Tương tự như cách hoạt động của quyền dùng một lần, nếu người dùng từ chối hoặc đóng lời nhắc hơn 3 lần, thì lời nhắc sẽ không còn xuất hiện nữa mà thay vào đó, lời nhắc quyền thông thường sẽ xuất hiện.

Dùng thử hành vi mới

Nếu có phiên bản Chrome hỗ trợ hoặc đã đặt các cờ bắt buộc, bạn có thể kiểm thử hành vi mới trong VS Code trên web. Mở một thư mục và cấp quyền truy cập, sau đó đóng thẻ rồi mở lại và nhấp vào Mở gần đây (lưu ý rằng việc tải lại ngay không hoạt động để kích hoạt lời nhắc, bạn cần đóng tất cả các thẻ). Chọn thư mục trước đó và lời nhắc mới sẽ xuất hiện.

Kết luận

Quyền liên tục cho File System Access API là một trong những tính năng được yêu cầu nhiều nhất của API và lỗi triển khai cũng rất phổ biến, với nhiều nhà phát triển đánh dấu sao cho lỗi này. Bằng cách cung cấp tính năng này cho nhà phát triển và quan trọng nhất là cho người dùng, chúng tôi đã khắc phục được một khoảng trống quan trọng về tính năng so với các ứng dụng dành riêng cho nền tảng.

Lời cảm ơn

Bài đăng này được Christine Hollingsworth, Austin SullivanRachel Andrew xem xét.