保護檔案內容

Google Drive API 支援多種防止檔案修改方式,包括 檔案內容限制,並禁止使用者下載、列印或複製 檔案。

使用雲端硬碟內容限制,將檔案設為唯讀

您可以為 Google 雲端硬碟檔案新增內容限制,防止使用者 請按照下列步驟操作:

  • 修改標題
  • 編輯內容
  • 上傳修訂版本
  • 新增或修改註解

套用內容限制機制 將雲端硬碟項目設為唯讀,而不變更項目的 存取權限。也就是說 而非存取權限制儘管使用者無法修改檔案內容, 系統仍會根據存取層級 (例如, 編輯存取權仍可移動項目或變更項目的共用設定);

如要為雲端硬碟中的檔案新增或移除內容限制,使用者必須具有這項權限 必須具備相關聯的 權限。位於以下地點的檔案或資料夾: 我的雲端硬碟 或共用雲端硬碟: capabilities.canModifyEditorContentRestriction,您必須擁有 role=writer 。「我的雲端硬碟」或共用雲端硬碟中的檔案或資料夾 「ownerRestricted」內容限制,您必須是檔案擁有者,或是 role=organizer。使用者必須符合以下條件,才能查看設有內容限制的項目 role=reader 以上版本。如需完整的角色清單,請參閱 角色與 權限。如要變更檔案的權限,請參閱 變更權限

您可以使用 contentRestrictions.readOnly 布林值欄位 要設定的 files 項資源 內容限制請注意,你可以對某個項目設定內容限制 會覆寫現有參數

內容限制的情境

雲端硬碟項目的內容限制會指示使用者 內容。可能的原因如下:

  • 在檢閱或稽核期間暫停協作文件。
  • 將項目設為最終狀態,例如「已核准」。
  • 防止在敏感會議期間進行變更。
  • 針對自動化系統處理的工作流程禁止外部變更。
  • 限制 Google Apps Script 和 Google Workspace 外掛程式的編輯內容。
  • 避免意外編輯文件。

請注意,雖然內容限制有助於管理內容,但 目的是避免擁有足夠權限的使用者 項目。此外,您無法建立不可變動的記錄。 雲端硬碟內容限制可以變動,因此設有內容限制 並不保證項目一定不會變更。

管理有內容限制的檔案

Google 文件、Google 試算表、Google 簡報 和所有其他檔案 都可能含有內容限制。

項目的內容限制禁止變更其標題和內容。 包括:

  • 註解和建議 (在 Google 文件、試算表、 投影片和二進位檔案)
  • 二進位檔案的修訂版本
  • Google 文件中的文字和格式
  • 在 Google 試算表中輸入文字或公式 和例項
  • Google 簡報中所有內容,以及 投影片

部分檔案類型不得包含內容限制。下列為幾個範例:

新增內容限制

如要新增檔案內容限制,請使用 files.update 方法,搭配 contentRestrictions.readOnly欄位已設為 true。新增選用的 reason: 為何要新增限制,例如「敲定合約」下列 程式碼範例顯示如何新增內容限制:

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;
  }
}

FILE_ID 替換為所需檔案的 fileId 修改。

執行程式碼範例時,這個檔案會受到限制,並加上鎖頭符號 () 顯示在 Google 雲端硬碟使用者介面 (使用者介面)。 檔案現在是唯讀狀態

雲端硬碟檔案清單中設有內容限制的檔案。
圖 1. 檔案清單中設有內容限制的檔案。

移除內容限制

如要移除檔案內容限制,請使用 files.update 方法搭配 contentRestrictions.readOnly 欄位已設為 false。以下程式碼範例 顯示如何移除內容限制:

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;
  }
}

FILE_ID 替換為所需檔案的 fileId 修改。

執行程式碼範例時,這個檔案就不再受到限制。

您也可以透過雲端硬碟 UI 移除內容限制,以及 允許內容編輯 (前提是您已取得正確的權限)。這裡共有兩個 建議做法:

  1. 在雲端硬碟中,在有內容限制的檔案上按一下滑鼠右鍵,然後 按一下「解鎖

    移除雲端硬碟檔案清單中的檔案內容限制。
    圖 2. 移除雲端硬碟檔案清單中的檔案內容限制。
  2. 開啟有內容限制的檔案,然後按一下 (鎖定模式) > 解鎖檔案

    移除文件的檔案內容限制。
    圖 3. 移除文件的檔案內容限制。

檢查內容限制

如要查看內容限制,請使用 files.get 方法,搭配 contentRestrictions 傳回的欄位。以下程式碼範例說明如何 查看內容限制的狀態:

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;
  }
}

FILE_ID 替換為所需檔案的 fileId 檢查。

執行程式碼範例時,該方法會傳回 ContentRestriction敬上 資源 (如有)

新增只有檔案擁有者才能修改的內容限制

如要新增檔案內容限制,僅供檔案擁有者切換機制, 使用 files.update 方法搭配 contentRestrictions.ownerRestricted 布林值欄位設為 true。 以下程式碼範例顯示如何為檔案擁有者新增內容限制 僅適用於:

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;
  }
}

FILE_ID 替換為所需檔案的 fileId 修改。

執行程式碼範例時,這個檔案會受到限制,只有檔案 且擁有者可以將其移除。如果您是檔案擁有者,[] 中的檔案名稱旁會顯示有效鎖定符號 () 雲端硬碟使用者介面 (使用者介面)。如果 您不是擁有者,鎖頭符號會變暗。

如要移除 ownerRestricted 標記,請使用 files.update 方法,並搭配 contentRestrictions.ownerRestricted 欄位已設為「false」。

內容限制功能

files 資源包含 布林值 capabilities 欄位集合,用來表示動作 適用於單一檔案

內容限制包含下列capabilities

  • capabilities.canModifyEditorContentRestriction:目前的使用者 新增或修改內容限制
  • capabilities.canModifyOwnerContentRestriction:目前的使用者 您可以新增或修改擁有者內容限制
  • capabilities.canRemoveContentRestriction:目前使用者是否可 移除已套用的內容限制 (如有)。

若需更多資訊,請參閲 功能

如需擷取檔案 capabilities 的範例,請參閱驗證使用者 權限

禁止使用者下載、列印或複製您的檔案

您可以限制具備「role=commenter」或「role=reader」權限的使用者可執行的操作 在雲端硬碟中下載、列印及複製檔案 文件、試算表和簡報

如要移除下載、列印及複製檔案的選項,請使用 files.update 方法,搭配 copyRequiresWriterPermission 布林值欄位已設為 true