Google Drive API 支援多種防止檔案修改的方式,包括限制檔案內容,以及禁止下載、列印或複製檔案。
使用雲端硬碟內容限制,將檔案設為唯讀
您可以為 Google 雲端硬碟檔案新增內容限制,防止使用者執行下列操作:
- 修改標題
- 編輯內容
- 上傳修訂版本
- 新增或修改註解
套用內容限制機制可讓您將 Google 雲端硬碟項目的內容設為唯讀,而無須變更項目的存取權限。也就是說,這並非存取權限制。雖然使用者無法修改檔案內容,但仍可根據存取層級執行其他作業 (例如,具有編輯存取權的使用者仍可移動項目或變更其共用設定)。
如要新增或移除雲端硬碟檔案的內容限制,使用者必須具備相關權限。對於「我的雲端硬碟」中的檔案或資料夾,或採用 capabilities.canModifyEditorContentRestriction
的共用雲端硬碟,您必須指派 role=writer
。如果「我的雲端硬碟」或共用雲端硬碟中的檔案或資料夾設有 ownerRestricted
內容限制,您必須擁有該檔案或擁有 role=organizer
。如要查看受內容限制的項目,使用者必須擁有 role=reader
以上的年齡。如需角色的完整清單,請參閱「角色與權限」。如要變更檔案的權限,請參閱「變更權限」。
您可以使用 files
資源上的 contentRestrictions.readOnly
布林值欄位,設定內容限制。請注意,為項目設定內容限制會覆寫現有限制。
內容限制的情況
雲端硬碟項目的內容限制會向使用者發出信號,提醒他們不要變更內容。可能的原因如下:
- 在審查或稽核期間暫停協作文件的編輯作業。
- 將項目設為已完成狀態,例如已核准。
- 避免在機密會議期間進行變更。
- 禁止對自動化系統處理的工作流程進行外部變更。
- 限制 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 雲端硬碟使用者介面 (UI) 中的檔案名稱旁會顯示鎖定圖示 ( )。檔案現在為唯讀。
移除內容限制
如要移除檔案內容限制,請使用 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
。
執行程式碼範例時,這個檔案就不再受到限制。
你也可以使用 Drive UI 移除內容限制,並允許編輯內容 (前提是你擁有正確的權限)。您可以透過以下兩種方式進行這項操作:
在雲端硬碟中,在有內容限制的檔案上按一下滑鼠右鍵,然後按一下「Unlock
」。開啟受內容限制的檔案,然後依序按一下「(已鎖定模式)」>「解鎖檔案」。
檢查是否有內容限制
如要檢查內容限制,請使用 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
。
執行範例程式碼時,檔案會受到內容限制,只有檔案擁有者才能移除。如果您是檔案擁有者, 雲端硬碟使用者介面 (UI) 中的檔案名稱旁會顯示活動鎖定符號 ( )。如果您不是擁有者,鎖頭符號會呈現暗灰色。
如要移除 ownerRestricted
旗標,請使用 files.update
方法,並將 contentRestrictions.ownerRestricted
欄位設為 false
。
內容限制功能
files
資源包含一組布林值 capabilities
欄位,用來表示能否對檔案執行動作。
內容限制包含下列capabilities
:
capabilities.canModifyEditorContentRestriction
:目前使用者是否可以新增或修改內容限制。capabilities.canModifyOwnerContentRestriction
:目前使用者是否可以新增或修改擁有者內容限制。capabilities.canRemoveContentRestriction
:目前使用者是否可以移除已套用的內容限制 (如果有的話)。
詳情請參閱「功能」。
如需擷取檔案 capabilities
的範例,請參閱「驗證使用者權限」。
禁止使用者下載、列印或複製你的檔案
您可以限制具有 role=commenter
或 role=reader
權限的使用者,在 Google 雲端硬碟、Google 文件、試算表和簡報中下載、列印及複製檔案的方式。
如要移除下載、列印和複製檔案的選項,請使用 files.update
方法,並將 copyRequiresWriterPermission
布林值欄位設為 true
。