Google Drive API mendukung beberapa cara untuk mencegah modifikasi file, termasuk pembatasan konten file dan melarang opsi untuk mendownload, mencetak, atau menyalin file.
Membuat file hanya dapat dibaca dengan pembatasan konten Drive
Anda dapat menambahkan pembatasan konten ke file Google Drive untuk mencegah pengguna melakukan hal berikut:
- Mengubah judul
- Melakukan pengeditan konten
- Mengupload revisi
- Menambahkan atau mengubah komentar
Pembatasan konten bukan pembatasan akses. Meskipun pengguna tidak dapat mengubah konten file, operasi lain masih diizinkan, berdasarkan tingkat aksesnya. Misalnya, pengguna dengan akses edit masih dapat memindahkan item atau mengubah setelan berbagi.
Untuk menambahkan atau menghapus pembatasan konten pada file di Drive, pengguna
harus memiliki permissions terkait. Untuk file atau folder di Drive Saya atau drive bersama dengan capabilities.canModifyEditorContentRestriction, Anda harus memiliki role=writer yang ditetapkan. Untuk file atau folder di Drive Saya atau drive bersama dengan pembatasan konten ownerRestricted, Anda harus memiliki file atau memiliki role=organizer. Untuk melihat item dengan pembatasan konten, pengguna harus memiliki role=reader atau yang lebih tinggi. Untuk daftar lengkap peran, lihat Peran dan
izin. Untuk memperbarui izin pada file, lihat
Memperbarui izin.
Anda dapat menggunakan kolom boolean contentRestrictions.readOnly pada resource files untuk menetapkan pembatasan konten. Perhatikan bahwa menetapkan pembatasan konten pada item akan menimpa pembatasan konten yang ada.
Skenario untuk pembatasan konten
Pembatasan konten pada item Drive memberi sinyal kepada pengguna bahwa konten tidak boleh diubah. Hal ini dapat disebabkan oleh beberapa alasan berikut:
- Menjeda pekerjaan pada dokumen kolaboratif selama periode peninjauan atau audit.
- Menetapkan item ke status final, seperti disetujui.
- Mencegah perubahan selama rapat sensitif.
- Melarang perubahan eksternal untuk alur kerja yang ditangani oleh sistem otomatis.
- Membatasi pengeditan oleh Google Apps Script dan add-on Google Workspace.
- Menghindari pengeditan dokumen yang tidak disengaja.
Namun, perhatikan bahwa meskipun pembatasan konten dapat membantu mengelola konten, pembatasan ini tidak dimaksudkan untuk mencegah pengguna dengan izin yang memadai melanjutkan pekerjaan pada item. Selain itu, pembatasan konten bukan cara untuk membuat catatan yang tidak dapat diubah. Pembatasan konten Drive dapat diubah, sehingga pembatasan konten pada item tidak menjamin bahwa item tersebut tidak akan pernah berubah.
Mengelola file dengan pembatasan konten
Google Dokumen, Google Spreadsheet, dan Google Slide, serta semua file lainnya, dapat berisi pembatasan konten.
Pembatasan konten pada item mencegah perubahan pada judul dan kontennya, termasuk:
- Komentar dan saran (di Dokumen, Spreadsheet, Slide, dan file biner)
- Revisi file biner
- Teks dan pemformatan di Dokumen
- Teks atau formula di Spreadsheet, tata letak Spreadsheet, dan instance di Spreadsheet
- Semua konten di Slide, serta urutan dan jumlah slide
Jenis file tertentu tidak dapat berisi pembatasan konten. Beberapa contohnya adalah:
- Google Formulir
- Google Sites
- Google Gambar
- Pintasan dan pintasan pihak ketiga. Untuk mengetahui informasi selengkapnya, lihat Membuat file pintasan ke konten yang disimpan oleh aplikasi Anda dan Membuat pintasan ke file Drive.
Menambahkan pembatasan konten
Untuk menambahkan pembatasan konten file, gunakan metode
files.update dengan kolom
contentRestrictions.readOnly yang ditetapkan ke true. Tambahkan reason opsional untuk alasan Anda menambahkan pembatasan, seperti "Kontrak yang difinalisasi". Contoh kode berikut menunjukkan cara menambahkan pembatasan konten:
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;
}
}
Ganti FILE_ID dengan fileId file yang ingin Anda
ubah.
Saat Anda menjalankan kode contoh, konten file akan dibatasi dan simbol kunci () akan muncul di samping nama file dalam antarmuka pengguna Google Drive (UI). File tersebut kini hanya dapat dibaca.
Menghapus pembatasan konten
Untuk menghapus pembatasan konten file, gunakan metode files.update dengan kolom contentRestrictions.readOnly yang ditetapkan ke false. Contoh kode berikut menunjukkan cara menghapus pembatasan konten:
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;
}
}
Ganti FILE_ID dengan fileId file yang ingin Anda
ubah.
Saat Anda menjalankan kode contoh, konten file tidak lagi dibatasi.
Anda juga dapat menggunakan UI Drive untuk menghapus pembatasan konten dan mengizinkan pengeditan konten (asalkan Anda memiliki izin yang benar). Ada dua opsi untuk melakukannya:
Di Drive, klik kanan file dengan pembatasan konten, lalu klik Buka kunci .
Gambar 2. Menghapus pembatasan konten file dalam daftar file Drive. Buka file dengan pembatasan konten, lalu klik (Mode terkunci) > Buka kunci file.
Gambar 3. Menghapus pembatasan konten file dalam dokumen.
Memeriksa pembatasan konten
Untuk memeriksa pembatasan konten, gunakan metode
files.get dengan kolom
contentRestrictions yang ditampilkan. Contoh kode berikut menunjukkan cara memeriksa status pembatasan konten:
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;
}
}
Ganti FILE_ID dengan fileId file yang ingin Anda
periksa.
Saat Anda menjalankan kode contoh, metode ini akan menampilkan ContentRestriction resource jika ada.
Menambahkan pembatasan konten yang hanya dapat diubah oleh pemilik file
Untuk menambahkan pembatasan konten file sehingga hanya pemilik file yang dapat mengaktifkan atau menonaktifkan mekanisme,
gunakan metode files.update dengan
contentRestrictions.ownerRestricted kolom boolean yang ditetapkan ke true. Contoh kode berikut menunjukkan cara menambahkan pembatasan konten hanya untuk pemilik file:
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;
}
}
Ganti FILE_ID dengan fileId file yang ingin Anda
ubah.
Saat Anda menjalankan kode contoh, konten file akan dibatasi dan hanya pemilik file yang dapat menghapusnya. Jika Anda adalah pemilik file, simbol kunci aktif () akan muncul di samping nama file dalam antarmuka pengguna (UI) Drive. Jika Anda bukan pemiliknya, simbol kunci akan diredupkan.
Untuk menghapus tanda ownerRestricted, gunakan metode files.update dengan
contentRestrictions.ownerRestricted yang ditetapkan ke false.
Kemampuan pembatasan konten
Resource files berisi kumpulan kolom boolean
capabilities yang digunakan untuk menunjukkan apakah tindakan dapat dilakukan pada
file.
Pembatasan konten berisi capabilities berikut:
capabilities.canModifyEditorContentRestriction: Apakah pengguna saat ini dapat menambahkan atau mengubah pembatasan konten.capabilities.canModifyOwnerContentRestriction: Apakah pengguna saat ini dapat menambahkan atau mengubah pembatasan konten pemilik.capabilities.canRemoveContentRestriction: Apakah pengguna saat ini dapat menghapus pembatasan konten yang diterapkan (jika ada).
Untuk mengetahui informasi selengkapnya, lihat Memahami kemampuan file.
Untuk contoh pengambilan file capabilities, lihat Mendapatkan kemampuan file.
Mencegah pengguna mendownload, mencetak, atau menyalin file Anda
Anda dapat membatasi cara pengguna mendownload, mencetak, dan menyalin file dalam Drive, Dokumen, Spreadsheet, dan Slide.
Untuk menentukan apakah pengguna dapat mengubah pembatasan download file yang diterapkan oleh pemilik atau pengelola, periksa kolom boolean capabilities.canChangeItemDownloadRestriction. Jika capabilities.canChangeItemDownloadRestriction ditetapkan ke true, pembatasan download dapat diterapkan ke file. Untuk mengetahui informasi selengkapnya, lihat Memahami
kemampuan file.
Untuk menerapkan pembatasan download ke file, tetapkan kolom downloadRestrictions menggunakan metode
files.update. Anda dapat menetapkan kolom
menggunakan
DownloadRestrictionsMetadata
objek.
Objek DownloadRestrictionsMetadata memiliki dua kolom: itemDownloadRestriction dan effectiveDownloadRestrictionWithContext. Kedua kolom dapat dibaca, tetapi hanya itemDownloadRestriction yang dapat ditetapkan. Kolom
itemDownloadRestriction menampilkan DownloadRestriction objek. Objek DownloadRestriction memiliki dua kolom boolean terpisah: restrictedForReaders dan restrictedForWriters.
Saat menetapkan kolom itemDownloadRestriction, pembatasan download file akan diterapkan langsung oleh pemilik atau pengelola. Pembatasan ini tidak memperhitungkan setelan drive bersama atau aturan pencegahan kebocoran data (DLP). Untuk mengetahui informasi selengkapnya,
lihat Tentang DLP.
Jika Anda memperbarui kolom itemDownloadRestriction dengan menetapkan kolom restrictedForWriters ke true, hal ini berarti restrictedForReaders adalah true. Demikian pula, menetapkan restrictedForWriters ke true dan restrictedForReaders ke false sama dengan menetapkan restrictedForWriters dan restrictedForReaders ke true.
Untuk kolom effectiveDownloadRestrictionWithContext, pembatasan download diterapkan ke file dan memperhitungkan semua setelan pembatasan dan aturan DLP.
Kolom effectiveDownloadRestrictionWithContext dapat ditetapkan ke restrictedForWriters atau restrictedForReaders. Jika ada setelan pembatasan download atau salin untuk peran yang sesuai dari setelan file, setelan drive bersama, atau aturan DLP (termasuk yang memiliki konteks), nilai akan ditetapkan ke true, jika tidak, nilai akan ditetapkan ke false.
Kompatibilitas mundur
Sebaiknya gunakan objek
DownloadRestriction untuk
menerapkan cara pengguna dapat mendownload, mencetak, dan menyalin file.
Jika Anda ingin menggunakan
copyRequiresWriterPermission
kolom boolean, fungsinya akan berbeda untuk membaca dari dan menulis
ke kolom.
Nilai copyRequiresWriterPermission yang diambil mencerminkan apakah pengguna dengan izin role=commenter atau role=reader dapat mendownload, mencetak, atau menyalin file dalam Drive. Nilai kolom mencerminkan kombinasi setelan file, setelan drive bersama, atau aturan DLP. Namun, evaluasi konteks untuk aturan DLP tidak disertakan.
Menetapkan kolom copyRequiresWriterPermission ke false akan memperbarui kolom restrictedForWriters dan restrictedForReaders ke false. Artinya, setelan pembatasan download atau salin akan dihapus untuk semua pengguna.
copyRequiresWriterPermissionDownloadRestriction Kolom ini tidak dimaksudkan untuk digunakan bersama karena kedua nilai kolom dapat bertentangan.
Kolom yang mengontrol fitur download, cetak, dan salin
Tabel berikut mencantumkan files kolom resource
yang memengaruhi fungsi download, cetak, dan salin:
| Kolom | Deskripsi | Versi |
|---|---|---|
capabilities.canCopy |
Apakah pengguna saat ini dapat menyalin file. | v2 &v3 |
capabilities.canDownload |
Apakah pengguna saat ini dapat mendownload file. | v2 &v3 |
capabilities.canChangeCopyRequiresWriterPermission |
Apakah pengguna saat ini dapat mengubah pembatasan copyRequiresWriterPermission file. |
v2 &v3 |
capabilities.canChangeItemDownloadRestriction |
Apakah pengguna saat ini dapat mengubah pembatasan download file. | Khusus v3 |
copyRequiresWriterPermission |
Apakah opsi untuk menyalin, mencetak, atau mendownload file ini harus dinonaktifkan untuk pelihat dan pengomentar. | v2 &v3 |
downloadRestrictions |
Pembatasan download yang diterapkan pada file. | Khusus v3 |