API Google Drive hỗ trợ một số cách để ngăn việc sửa đổi tệp, bao gồm cả việc hạn chế nội dung tệp và cấm tải xuống, in hoặc sao chép tệp.
Đặt tệp ở chế độ chỉ đọc bằng các giới hạn nội dung trên Drive
Bạn có thể thêm quy định hạn chế về nội dung vào một tệp trên Google Drive để ngăn người dùng thực hiện 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
Quy định hạn chế về nội dung 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 của tệp, nhưng họ vẫn có thể thực hiện các thao tác khác dựa trên cấp truy cập của mình. 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 cài đặt cách chia sẻ của mục đó.
Để thêm hoặc xoá quy định hạn chế về nội dung đối với một tệp trên Drive, người dùng
phải có permissions liên kết. Đố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ó 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ó quy định hạn chế về nội dung ownerRestricted, bạn phải sở hữu tệp đó hoặc có role=organizer. Để xem một mục có quy định hạn chế về 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. Để cập nhật quyền đối với một tệp, hãy xem bài viết
Cập nhật quyền.
Bạn có thể sử dụng trường boolean contentRestrictions.readOnly trên tài nguyên files để đặt quy định hạn chế về nội dung. Xin lưu ý rằng việc đặt quy định hạn chế về nội dung đối với một mục sẽ ghi đè quy định hiện có.
Các trường hợp áp dụng giới hạn nội dung
Quy định hạn chế về nội dung đối với một mục trên Drive 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à do 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 thời gian 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 việc thay đổi trong một cuộc họp nhạy cảm.
- Cấm thay đổi bên ngoài đối với quy trình làm việc do hệ thống tự động xử lý.
- Hạn chế việc chỉnh sửa bằng Google Apps Script và tiện ích bổ sung cho Google Workspace.
- Tránh chỉnh sửa tài liệu do vô ý.
Tuy nhiên, xin lưu ý rằng mặc dù giới hạn nội dung có thể giúp quản lý nội dung, nhưng giới hạn này không nhằm mục đích 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 không thay đổi được. Các giới hạn nội dung trên Drive có thể thay đổi, vì vậy, giới hạn 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, đều có thể chứa giới hạn nội dung.
Quy định hạn chế về 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)
- Bản sửa đổi của 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 không thể chứa quy định hạn chế về nội dung. Một số ví dụ như:
- Google Biểu mẫu
- Google Sites
- Google Bản vẽ
- Lối tắt và lối tắt của bên thứ ba. Để biết thêm thông tin, hãy xem bài viết Tạo tệp lối tắt đến nội dung do ứng dụng của bạn lưu trữ và Tạo lối tắt đến tệp trên Drive.
Thêm quy định hạn chế về nội dung
Để thêm quy định 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 cho lý do bạ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ị hạn chế về nội dung và biểu tượng khoá () sẽ 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.
Xoá quy định hạn chế về nội dung
Để xoá quy định 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á quy định hạn chế về 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ế về nội dung.
Bạn cũng có thể sử dụng giao diện người dùng Drive để xoá quy định hạn chế về 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 cách để thực hiện việc này:
Trong Drive, hãy nhấp chuột phải vào tệp có quy định hạn chế về nội dung và nhấp vào Mở khoá .
Hình 2. Xoá quy định hạn chế về nội dung tệp trong danh sách tệp trên Drive. Mở tệp có quy định hạn chế về nội dung rồi nhấp vào (Chế độ khoá) > Mở khoá tệp.
Hình 3. Xoá quy định hạn chế về nội dung tệp trong một tài liệu.
Kiểm tra quy định hạn chế về nội dung
Để 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
contentRestrictions được trả về. Mẫu mã sau đây cho biết cách kiểm tra trạng thái của quy định hạn chế về 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 bạn chạy mã mẫu, phương thức này sẽ trả về tài nguyên ContentRestriction (nếu có).
Chỉ thêm quy định hạn chế về nội dung mà chủ sở hữu tệp mới có thể sửa đổi
Để thêm quy định hạn chế về 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ị hạn chế về nội dung và chỉ chủ sở hữu tệp mới có thể xoá quy định hạn chế này. 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 (UI) của Drive. 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.
Các tính năng hạn chế về 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 hành động trên một
tệp hay không.
Giới hạn nội dung chứa các capabilities sau:
capabilities.canModifyEditorContentRestriction: Cho biết liệu người dùng hiện tại có thể thêm hoặc sửa đổi quy định hạn chế về nội dung hay không.capabilities.canModifyOwnerContentRestriction: Cho biết liệu người dùng hiện tại có thể thêm hoặc sửa đổi quy định hạn chế về nội dung của chủ sở hữu hay không.capabilities.canRemoveContentRestriction: Cho biết liệu người dùng hiện tại có thể xoá quy định hạn chế về nội dung đã áp dụng (nếu có) hay không.
Để biết thêm thông tin, hãy xem bài viết Tìm hiểu về các tính năng của tệp.
Để xem ví dụ về cách truy xuất tệp capabilities, hãy xem bài viết Lấy các tính năng của tệp.
Ngăn người dùng tải xuống, in hoặc sao chép tệp
Bạn có thể giới hạn cách người dùng 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.
Để xác định xem người dùng có thể thay đổi chủ sở hữu hoặc quy định hạn chế tải xuống do người tổ chức áp dụng đối với một tệp hay không, hãy kiểm tra trường boolean
capabilities.canChangeItemDownloadRestriction. Nếu bạn đặt capabilities.canChangeItemDownloadRestriction thành true, thì có thể áp dụng quy định hạn chế tải xuống cho tệp. Để biết thêm thông tin, hãy xem bài viết Tìm hiểu về các tính năng của tệp.
Để áp dụng quy định hạn chế tải xuống cho một tệp, hãy đặt trường downloadRestrictions bằng phương thức
files.update. Bạn có thể đặt trường này
bằng
DownloadRestrictionsMetadata
đối tượng.
Đối tượng DownloadRestrictionsMetadata có 2 trường: itemDownloadRestriction và effectiveDownloadRestrictionWithContext. Cả hai trường đều có thể đọc được nhưng chỉ có thể đặt itemDownloadRestriction. Trường
itemDownloadRestriction trả về đối tượng DownloadRestriction. Đối tượng DownloadRestriction có 2 trường boolean riêng biệt: restrictedForReaders và restrictedForWriters.
Khi đặt trường itemDownloadRestriction, quy định hạn chế tải xuống của tệp sẽ được chủ sở hữu hoặc người tổ chức áp dụng trực tiếp. Trường này không tính đến chế độ cài đặt bộ nhớ dùng chung hoặc quy tắc ngăn chặn mất dữ liệu (DLP). Để biết thêm thông tin,
hãy xem Giới thiệu về DLP.
Nếu bạn cập nhật trường itemDownloadRestriction bằng cách đặt trường restrictedForWriters thành true, thì điều đó có nghĩa là restrictedForReaders là true. Tương tự, việc đặt restrictedForWriters thành true và restrictedForReaders thành false tương đương với việc đặt cả restrictedForWriters và restrictedForReaders thành true.
Đối với trường effectiveDownloadRestrictionWithContext, quy định hạn chế tải xuống được áp dụng cho tệp và tính đến tất cả các chế độ cài đặt hạn chế và quy tắc DLP.
Bạn có thể đặt trường effectiveDownloadRestrictionWithContext thành restrictedForWriters hoặc restrictedForReaders. Nếu có bất kỳ chế độ cài đặt hạn chế tải xuống hoặc sao chép nào cho các vai trò tương ứng trong chế độ cài đặt tệp, chế độ cài đặt bộ nhớ dùng chung hoặc quy tắc DLP (bao gồm cả những quy tắc có ngữ cảnh), thì giá trị sẽ được đặt thành true, nếu không thì giá trị sẽ là false.
Khả năng tương thích ngược
Bạn nên sử dụng đối tượng
DownloadRestriction để
thực thi cách người dùng có thể tải xuống, in và sao chép tệp.
Nếu bạn muốn sử dụng trường boolean
copyRequiresWriterPermission, thì chức năng này sẽ khác nhau đối với cả việc đọc và ghi
vào trường.
Giá trị đã truy xuất của trường copyRequiresWriterPermission phản ánh việc người dùng có quyền role=commenter hoặc role=reader có thể tải xuống, in hoặc sao chép tệp trong Drive hay không. Giá trị trường phản ánh sự kết hợp của chế độ cài đặt tệp, chế độ cài đặt bộ nhớ dùng chung hoặc quy tắc DLP. Tuy nhiên, việc đánh giá ngữ cảnh cho quy tắc DLP không được đưa vào.
Việc đặt trường copyRequiresWriterPermission thành false sẽ cập nhật cả trường restrictedForWriters và restrictedForReaders thành false. Điều này có nghĩa là chế độ cài đặt hạn chế tải xuống hoặc sao chép sẽ bị xoá đối với tất cả người dùng.
copyRequiresWriterPermissionDownloadRestriction Bạn không nên sử dụng các trường này cùng nhau vì 2 giá trị trường có thể xung đột.
Các trường kiểm soát tính năng tải xuống, in và sao chép
Bảng sau đây liệt kê các trường tài nguyên files
ảnh hưởng đến chức năng tải xuống, in và sao chép:
| Trường | Mô tả | Phiên bản |
|---|---|---|
capabilities.canCopy |
Cho biết liệu người dùng hiện tại có thể sao chép một tệp hay không. | v2 và v3 |
capabilities.canDownload |
Cho biết liệu người dùng hiện tại có thể tải một tệp xuống hay không. | v2 và v3 |
capabilities.canChangeCopyRequiresWriterPermission |
Cho biết liệu người dùng hiện tại có thể thay đổi quy định hạn chế copyRequiresWriterPermission của một tệp hay không. |
v2 và v3 |
capabilities.canChangeItemDownloadRestriction |
Cho biết liệu người dùng hiện tại có thể thay đổi quy định hạn chế tải xuống của một tệp hay không. | Chỉ v3 |
copyRequiresWriterPermission |
Cho biết liệu các tuỳ chọn sao chép, in hoặc tải tệp này xuống có nên bị tắt đối với người đọc và người nhận xét hay không. | v2 và v3 |
downloadRestrictions |
Quy định hạn chế tải xuống được áp dụng cho một tệp. | Chỉ v3 |