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.

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:

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.

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

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:

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

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

    Menghapus batasan konten file dalam dokumen.
    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.

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