Bảo vệ nội dung tệp

API Google Drive hỗ trợ một số cách để ngăn chặn hành vi sửa đổi tệp, trong đó có việc hạn chế nội dung tệp và cấm tuỳ chọn tải xuống, in hoặc sao chép tệp.

Đặt tệp ở chế độ chỉ có thể đọc với các giới hạn nội dung trên Drive

Bạn có thể thêm giới hạn nội dung vào tệp trên Google Drive để ngăn người dùng làm những việc sau:

  • Sửa đổi tiêu đề
  • Chỉnh sửa nội dung
  • Tải bản sửa đổi lên
  • Thêm hoặc sửa đổi nhận xét

Áp dụng giới hạn nội dung là một cơ chế cho phép đặt nội dung của một mục trên Drive ở chế độ chỉ đọc mà không cần thay đổi quyền truy cập của mục đó. Điều này có nghĩa đây không phải là quy định hạn chế về quyền truy cập. Mặc dù người dùng không thể sửa đổi nội dung tệp, nhưng các thao tác khác vẫn được cho phép dựa trên cấp truy cập (ví dụ: người dùng có quyền chỉnh sửa vẫn có thể di chuyển một mục hoặc thay đổi chế độ cài đặt cách chia sẻ của mục đó).

Để thêm hoặc xoá giới hạn nội dung đối với một tệp trong Drive, người dùng phải có quyền được liên kết. Đối với một tệp hoặc thư mục trong Drive của tôi hoặc bộ nhớ dùng chung có capabilities.canModifyEditorContentRestriction, bạn phải được chỉ định role=writer. Đối với một tệp hoặc thư mục trong Drive của tôi hoặc một bộ nhớ dùng chung có giới hạn nội dung ownerRestricted, bạn phải sở hữu tệp đó hoặc có role=organizer. Để xem một mục có giới hạn nội dung, người dùng phải có role=reader trở lên. Để xem danh sách đầy đủ các vai trò, hãy xem bài viết Vai trò và quyền. Để thay đổi quyền đối với một tệp, hãy xem phần Thay đổi quyền.

Bạn có thể sử dụng trường boolean contentRestrictions.readOnly trên tài nguyên files để đặt giới hạn nội dung. Xin lưu ý rằng việc đặt giới hạn nội dung cho một mục sẽ ghi đè mục hiện có.

Các trường hợp bị giới hạn nội dung

Hạn chế nội dung đối với một mục trên Drive báo hiệu cho người dùng biết rằng không nên thay đổi nội dung. Điều này có thể là vì một số lý do sau:

  • Tạm dừng công việc trên một tài liệu cộng tác trong giai đoạn xem xét hoặc kiểm tra.
  • Đặt một mục ở trạng thái hoàn tất, chẳng hạn như đã phê duyệt.
  • Ngăn chặn những thay đổi trong cuộc họp nhạy cảm.
  • Cấm thay đổi bên ngoài đối với quy trình công việc do hệ thống tự động xử lý.
  • Hạn chế chỉnh sửa bằng Google Apps Script và Tiện ích bổ sung của Google Workspace.
  • Tránh việc vô tình chỉnh sửa tài liệu.

Xin lưu ý rằng mặc dù các quy định hạn chế về nội dung có thể giúp quản lý nội dung, nhưng việc này không có nghĩa là ngăn người dùng có đủ quyền tiếp tục làm việc trên một mục. Ngoài ra, đây không phải là cách để tạo bản ghi bất biến. Các giới hạn nội dung trên Drive có thể thay đổi, vì vậy, việc hạn chế nội dung đối với một mục không đảm bảo rằng mục đó sẽ không bao giờ thay đổi.

Quản lý tệp có giới hạn nội dung

Google Tài liệu, Google Trang tính và Google Trang trình bày, cũng như tất cả các tệp khác, có thể chứa các quy định hạn chế về nội dung.

Việc hạn chế nội dung đối với một mục sẽ ngăn việc thay đổi tiêu đề và nội dung của mục đó, bao gồm:

  • Nhận xét và đề xuất (trên Tài liệu, Trang tính, Trang trình bày và tệp nhị phân)
  • Sửa đổi tệp nhị phân
  • Văn bản và định dạng trong Tài liệu
  • Văn bản hoặc công thức trong Trang tính, bố cục Trang tính và thực thể trong Trang tính
  • Tất cả nội dung trong Trang trình bày, cũng như thứ tự và số lượng trang trình bày

Một số loại tệp nhất định không thể chứa giới hạn nội dung. Một số ví dụ như:

Thêm giới hạn nội dung

Để thêm quy tắc hạn chế về nội dung tệp, hãy sử dụng phương thức files.update với trường contentRestrictions.readOnly được đặt thành true. Thêm reason (không bắt buộc) để lý do cần thêm quy định hạn chế, chẳng hạn như "Hợp đồng đã hoàn tất". Mã mẫu sau đây cho biết cách thêm giới hạn nội dung:

Java

File updatedFile =
  new File()
      .setContentRestrictions(
          ImmutableList.of(new ContentRestriction().setReadOnly(true).setReason("Finalized contract."));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Set a content restriction on a file.
* @return{obj} updated file
**/
async function addContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': True,
    'reason': 'Finalized contract.',
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Thay thế FILE_ID bằng fileId của tệp mà bạn muốn sửa đổi.

Khi bạn chạy mã mẫu, tệp sẽ bị giới hạn nội dung và biểu tượng khoá () xuất hiện bên cạnh tên tệp trong giao diện người dùng (UI) của Google Drive. Tệp hiện ở chế độ chỉ có thể đọc.

Tệp có giới hạn nội dung bên trong danh sách tệp trên Drive.
Hình 1. Một tệp có giới hạn nội dung nằm trong một danh sách tệp trên Drive.

Xoá giới hạn nội dung

Để gỡ bỏ hạn chế về nội dung tệp, hãy sử dụng phương thức files.update với trường contentRestrictions.readOnly được đặt thành false. Mã mẫu sau đây cho biết cách xoá giới hạn nội dung:

Java

File updatedFile =
new File()
    .setContentRestrictions(
        ImmutableList.of(new ContentRestriction().setReadOnly(false));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': False}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Remove a content restriction on a file.
* @return{obj} updated file
**/
async function removeContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': False,
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Thay thế FILE_ID bằng fileId của tệp mà bạn muốn sửa đổi.

Khi bạn chạy mã mẫu, tệp sẽ không còn bị hạn chế nội dung nữa.

Bạn cũng có thể sử dụng giao diện người dùng Drive để xoá giới hạn nội dung và cho phép chỉnh sửa nội dung (miễn là bạn có quyền phù hợp). Có 2 lựa chọn để làm việc này:

  1. Trong Drive, hãy nhấp chuột phải vào tệp có giới hạn nội dung rồi nhấp vào Mở khoá .

    Xoá giới hạn nội dung tệp trong danh sách tệp trên Drive.
    Hình 2. Xoá hạn chế nội dung tệp trong danh sách tệp trên Drive.
  2. Mở tệp có giới hạn nội dung rồi nhấp vào (Chế độ khoá) > Mở khoá tệp.

    Xoá giới hạn nội dung tệp trong tài liệu.
    Hình 3. Xoá giới hạn nội dung tệp trong tài liệu.

Kiểm tra xem có quy định giới hạn về nội dung hay không

Để kiểm tra quy định hạn chế về nội dung, hãy sử dụng phương thức files.get với trường trả về contentRestrictions. Mã mẫu sau đây cho biết cách kiểm tra trạng thái giới hạn nội dung:

Java

File response = driveService.files().get("FILE_ID").setFields("contentRestrictions").execute();

Python

response = drive_service.files().get(fileId="FILE_ID", fields = "contentRestrictions").execute();

Node.js

/**
* Get content restrictions on a file.
* @return{obj} updated file
**/
async function fetchContentRestrictions() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  try {
    const response = await service.files.get({
      fileId: 'FILE_ID',
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Thay thế FILE_ID bằng fileId của tệp mà bạn muốn kiểm tra.

Khi chạy mã mẫu, phương thức này sẽ trả về một tài nguyên ContentRestriction (nếu có).

Thêm giới hạn nội dung mà chỉ chủ sở hữu tệp mới có thể sửa đổi

Để thêm quy tắc hạn chế nội dung tệp sao cho chỉ chủ sở hữu tệp mới có thể bật/tắt cơ chế này, hãy sử dụng phương thức files.update với trường boolean contentRestrictions.ownerRestricted được đặt thành true. Mã mẫu sau đây cho biết cách thêm giới hạn nội dung chỉ dành cho chủ sở hữu tệp:

Java

File updatedFile =
  new File()
      .setContentRestrictions(
          ImmutableList.of(new ContentRestriction().setReadOnly(true).setOwnerRestricted(true).setReason("Finalized contract."));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': True, 'ownerRestricted': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Set an owner restricted content restriction on a file.
* @return{obj} updated file
**/
async function addOwnerRestrictedContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': True,
    'ownerRestricted': True,
    'reason': 'Finalized contract.',
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Thay thế FILE_ID bằng fileId của tệp mà bạn muốn sửa đổi.

Khi bạn chạy mã mẫu, tệp sẽ bị giới hạn nội dung và chỉ chủ sở hữu tệp mới có thể xoá tệp đó. Nếu bạn là chủ sở hữu tệp, biểu tượng khoá đang hoạt động () sẽ xuất hiện bên cạnh tên tệp trong Giao diện người dùng Drive (UI). Nếu bạn không phải là chủ sở hữu, biểu tượng khoá sẽ bị làm mờ.

Để xoá cờ ownerRestricted, hãy sử dụng phương thức files.update với trường contentRestrictions.ownerRestricted được đặt thành false.

Khả năng giới hạn nội dung

Tài nguyên files chứa một tập hợp các trường boolean capabilities dùng để cho biết liệu có thể thực hiện một thao tác trên tệp hay không.

Giới hạn nội dung có chứa capabilities sau:

Để biết thêm thông tin, hãy xem phần Tính năng.

Để biết ví dụ về cách truy xuất tệp capabilities, hãy xem bài viết Xác minh quyền của người dùng.

Ngăn người dùng tải xuống, in hoặc sao chép tệp của bạn

Bạn có thể giới hạn cách người dùng có quyền role=commenter hoặc role=reader có thể tải xuống, in và sao chép tệp trong Drive, Tài liệu, Trang tính và Trang trình bày.

Để xoá các tuỳ chọn tải xuống, in và sao chép tệp, hãy dùng phương thức files.update với trường boolean copyRequiresWriterPermission được đặt thành true.