Google Drive API 支持多种防止文件修改的方法,包括 文件内容限制,并禁止用户下载、打印或复制 文件。
将文件设为只读,并限制云端硬盘内容
您可以为 Google 云端硬盘文件添加内容限制,以防止用户执行以下操作: 执行以下操作:
- 修改标题
- 修改内容
- 上传修订版本
- 添加或修改评论
应用内容限制是一种机制 将云端硬盘内容设为只读,而不更改该内容的 访问权限。这意味着 而不是访问限制虽然用户无法修改文件内容,但其他 仍然允许执行某些操作(例如, 编辑权限仍然可以移动项或更改其共享设置)。
要添加或移除云端硬盘中文件的内容限制,用户需要
必须具有
权限。对于以下文件夹中的文件或文件夹:
“我的云端硬盘”或包含
capabilities.canModifyEditorContentRestriction
,您必须具有 role=writer
分配。对于“我的云端硬盘”或共享云端硬盘中的文件或文件夹,
ownerRestricted
内容限制,您必须是该文件的所有者,或者拥有
role=organizer
。要查看存在内容限制的内容,用户必须满足以下条件:
role=reader
或更高版本。有关角色的完整列表,请参阅角色和
权限。如需更改对文件的权限,请参阅
更改权限。
您可以在contentRestrictions.readOnly
要设置的 files
资源
内容限制。请注意,为某个项设置内容限制
将覆盖现有规则
内容限制的各种情况
针对云端硬盘内容的限制可向用户表明 不应更改内容可能的原因如下:
- 在审核或审核期间暂停协作文档。
- 将某个项设为已敲定状态,例如“已批准”。
- 在敏感会议期间防止更改。
- 禁止对自动化系统处理的工作流进行外部更改。
- 限制通过 Google Apps 脚本和 Google Workspace 插件进行的修改。
- 避免意外编辑文档。
请注意,虽然内容限制有助于管理内容 旨在防止拥有足够权限的用户继续处理 内容。此外,它也不是创建不可变记录的方法。 云端硬盘内容限制是可变的,因此内容限制 并不能保证该内容永不更改。
管理具有内容限制的文件
Google 文档、Google 表格、Google 幻灯片 可以包含内容限制。
针对某个项的内容限制可防止修改其标题和内容; 包括:
- 评论和建议(在文档、表格、 幻灯片和二进制文件)
- 二进制文件的修订版本
- 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 云端硬盘用户界面 (界面)。通过 文件现在是只读的。
) 出现在以下文件夹内的文件名旁边:移除内容限制
如需移除文件内容限制,请将 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
修改。
运行示例代码时,文件内容不再受限。
您还可以使用云端硬盘界面移除内容限制,并 允许内容修改(前提是您拥有正确的权限)。有两个 选择以下选项:
在云端硬盘中,右键点击存在内容限制的文件,然后 点击解锁
。打开具有内容限制的文件,然后点击 (锁定模式) > 解锁文件。
检查内容限制
要查看内容限制,请使用
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
”。