Melindungi konten file

Google Drive API mendukung beberapa cara untuk mencegah modifikasi file, termasuk pembatasan konten file dan melarang opsi untuk mendownload, mencetak, atau menyalin file.

Menjadikan file hanya baca dengan pembatasan konten Drive

Anda dapat menambahkan pembatasan konten ke file Google Drive untuk mencegah pengguna melakukan hal berikut:

  • Mengubah judul
  • Mengedit konten
  • Mengupload revisi
  • Menambahkan atau mengubah komentar

Pembatasan konten bukanlah pembatasan akses. Meskipun pengguna tidak dapat mengubah konten file, operasi lain tetap diizinkan, berdasarkan tingkat akses mereka. Misalnya, pengguna dengan akses edit masih dapat memindahkan item atau mengubah setelan berbagi item.

Untuk menambahkan atau menghapus pembatasan konten pada file di Drive, pengguna harus memiliki permissions yang 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 batasan konten ownerRestricted, Anda harus memiliki file tersebut atau memiliki role=organizer. Untuk melihat item dengan pembatasan konten, pengguna harus memiliki role=reader atau yang lebih tinggi. Untuk melihat 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 menyetel batasan konten pada item akan menimpa batasan yang ada.

Skenario untuk batasan konten

Pembatasan konten pada item Drive memberi sinyal kepada pengguna bahwa konten tidak boleh diubah. Hal ini dapat terjadi karena beberapa alasan berikut:

  • Menjeda pekerjaan pada dokumen kolaboratif selama periode peninjauan atau audit.
  • Menetapkan item ke status akhir, 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 batasan konten dapat membantu mengelola konten, batasan ini tidak dimaksudkan untuk mencegah pengguna dengan izin yang memadai melanjutkan pengerjaan item. Selain itu, ini bukan cara untuk membuat catatan yang tidak dapat diubah. Pembatasan konten Drive dapat berubah, sehingga pembatasan konten pada item tidak menjamin bahwa item tersebut tidak akan pernah berubah.

Mengelola file dengan batasan konten

Google Dokumen, Google Spreadsheet, dan Google Slide, serta semua file lainnya, dapat berisi batasan 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:

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 batasan, seperti "Kontrak telah diselesaikan". 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, file tersebut dibatasi kontennya dan simbol gembok () akan muncul di samping nama file dalam antarmuka pengguna (UI) Google Drive. File sekarang bersifat hanya baca.

File dengan pembatasan konten dalam daftar file Drive.
Gambar 1. File dengan batasan konten dalam daftar file Drive.

Menghapus pembatasan konten

Untuk menghapus batasan 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 contoh kode, file tidak lagi dibatasi kontennya.

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:

  1. Di Drive, klik kanan file dengan batasan konten, lalu klik Buka kunci .

    Menghapus pembatasan konten file dalam daftar file Drive.
    Gambar 2. Menghapus batasan konten file dalam daftar file Drive.
  2. Buka file dengan batasan konten, lalu klik (Mode terkunci) > Buka kunci file.

    Menghapus batasan konten file dalam dokumen.
    Gambar 3. Menghapus batasan 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 contoh kode, metode ini akan menampilkan resource ContentRestriction jika ada.

Menambahkan batasan konten yang hanya dapat diubah oleh pemilik file

Untuk menambahkan pembatasan konten file sehingga hanya pemilik file yang dapat mengaktifkan mekanisme, gunakan metode files.update dengan kolom boolean contentRestrictions.ownerRestricted yang disetel 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, file dibatasi kontennya 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 gembok akan diredupkan.

Untuk menghapus tanda ownerRestricted, gunakan metode files.update dengan kolom contentRestrictions.ownerRestricted yang ditetapkan ke false.

Kemampuan pembatasan konten

Resource files berisi kumpulan kolom capabilities boolean yang digunakan untuk menunjukkan apakah suatu 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 yang diterapkan oleh pemilik atau penyelenggara pada file, periksa kolom boolean capabilities.canChangeItemDownloadRestriction. Jika capabilities.canChangeItemDownloadRestriction disetel ke true, pembatasan download dapat diterapkan ke file. Untuk mengetahui informasi selengkapnya, lihat Memahami kemampuan file.

Untuk menerapkan batasan download ke file, tetapkan kolom downloadRestrictions menggunakan metode files.update. Anda dapat menyetel kolom menggunakan objek DownloadRestrictionsMetadata.

Objek DownloadRestrictionsMetadata memiliki dua kolom: itemDownloadRestriction dan effectiveDownloadRestrictionWithContext. Kedua bidang dapat dibaca, tetapi hanya itemDownloadRestriction yang dapat ditetapkan. Kolom itemDownloadRestriction menampilkan objek DownloadRestriction. Objek DownloadRestriction memiliki dua kolom boolean terpisah: restrictedForReaders dan restrictedForWriters.

Saat menyetel kolom itemDownloadRestriction, pembatasan download file diterapkan langsung oleh pemilik atau penyelenggara. 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, artinya restrictedForReaders adalah true. Demikian pula, menyetel restrictedForWriters ke true dan restrictedForReaders ke false sama dengan menyetel restrictedForWriters dan restrictedForReaders ke true.

Untuk kolom effectiveDownloadRestrictionWithContext, pembatasan download diterapkan ke file dan mencakup semua setelan pembatasan dan aturan DLP.

Kolom effectiveDownloadRestrictionWithContext dapat disetel ke restrictedForWriters atau restrictedForReaders. Jika ada setelan pembatasan download atau penyalinan untuk peran yang sesuai dari setelan file, setelan drive bersama, atau aturan DLP (termasuk yang memiliki konteks), nilai akan disetel ke true, jika tidak, nilainya adalah false.

Kompatibilitas mundur

Sebaiknya gunakan objek DownloadRestriction untuk menerapkan cara pengguna dapat mendownload, mencetak, dan menyalin file.

Jika Anda ingin menggunakan kolom boolean copyRequiresWriterPermission, fungsinya berbeda untuk membaca dari dan menulis ke kolom.

Nilai kolom 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 penyalinan dihapus untuk semua pengguna.

Kolom yang mengontrol fitur download, cetak, dan salin

Tabel berikut mencantumkan kolom resource files 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 batasan copyRequiresWriterPermission file. v2 & v3
capabilities.canChangeItemDownloadRestriction Apakah pengguna saat ini dapat mengubah batasan download file. Khusus v3
copyRequiresWriterPermission Apakah opsi untuk menyalin, mencetak, atau mendownload file ini harus dinonaktifkan bagi pembaca dan pengomentar. v2 & v3
downloadRestrictions Pembatasan download yang diterapkan pada file. Khusus v3