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 baca dengan batasan konten Drive

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

  • Mengubah judul
  • Melakukan pengeditan konten
  • Mengupload revisi
  • Menambahkan atau mengubah komentar

Menerapkan batasan konten adalah mekanisme yang memungkinkan konten item Drive dibuat hanya baca tanpa mengubah izin akses item. Artinya, ini bukan pembatasan akses. Meskipun pengguna tidak dapat mengubah konten file, operasi lainnya masih diizinkan berdasarkan tingkat akses (misalnya, pengguna dengan akses edit masih dapat memindahkan item atau mengubah setelan berbaginya).

Untuk menambahkan atau menghapus batasan konten pada file di Drive, pengguna harus memiliki izin terkait. Untuk file atau folder di Drive Saya atau drive bersama dengan capabilities.canModifyEditorContentRestriction, Anda harus menetapkan role=writer. 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 mengetahui daftar lengkap peran, lihat Peran & izin. Untuk mengubah izin pada file, lihat Mengubah izin.

Anda dapat menggunakan kolom boolean contentRestrictions.readOnly di resource files untuk menetapkan batasan konten. Perhatikan bahwa menyetel pembatasan konten pada item akan menimpa pembatasan yang ada.

Skenario untuk batasan konten

Pembatasan konten pada item Drive memberi tahu 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 selesai, seperti disetujui.
  • Mencegah perubahan selama rapat sensitif.
  • Melarang perubahan eksternal untuk alur kerja yang ditangani oleh sistem otomatis.
  • Membatasi pengeditan oleh add-on Google Apps Script dan Google Workspace.
  • Menghindari pengeditan yang tidak disengaja pada dokumen.

Namun, perhatikan bahwa meskipun pembatasan konten dapat membantu mengelola konten, pembatasan tersebut tidak bertujuan untuk mencegah pengguna dengan izin yang memadai untuk terus mengerjakan item. Selain itu, ini bukan cara untuk membuat data 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 batasan konten

Google Dokumen, Google Spreadsheet, dan Google Slide, serta semua file lainnya, dapat berisi batasan konten.

Batasan 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 boleh berisi batasan konten. Beberapa contohnya adalah:

Menambahkan batasan konten

Untuk menambahkan batasan konten file, gunakan metode files.update dengan kolom contentRestrictions.readOnly ditetapkan ke true. Tambahkan reason opsional untuk alasan Anda menambahkan batasan, seperti "Kontrak telah diselesaikan". Contoh kode berikut menunjukkan cara menambahkan batasan 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 akan dibatasi konten dan simbol gembok () akan muncul di samping nama file dalam antarmuka pengguna (UI) Google Drive. File ini sekarang bersifat hanya baca.

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

Menghapus batasan konten

Untuk menghapus batasan konten file, gunakan metode files.update dengan kolom contentRestrictions.readOnly ditetapkan ke false. Contoh kode berikut menunjukkan cara menghapus batasan 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, file tidak lagi dibatasi konten.

Anda juga dapat menggunakan UI Drive untuk menghapus batasan 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 batasan 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 batasan konten, gunakan metode files.get dengan kolom contentRestrictions yang ditampilkan. Contoh kode berikut menunjukkan cara memeriksa status batasan 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 akan menampilkan resource ContentRestriction jika ada.

Menambahkan batasan konten yang hanya dapat diubah oleh pemilik file

Untuk menambahkan batasan konten file sehingga hanya pemilik file yang dapat mengalihkan mekanisme, gunakan metode files.update dengan kolom boolean contentRestrictions.ownerRestricted yang ditetapkan ke true. Contoh kode berikut menunjukkan cara menambahkan batasan 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 akan dibatasi konten dan hanya pemilik file yang dapat menghapusnya. Jika Anda adalah pemilik file, simbol gembok aktif () akan muncul di samping nama file dalam antarmuka pengguna (UI) Drive. Jika Anda bukan pemiliknya, simbol gembok akan redup.

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

Kemampuan pembatasan konten

Resource files berisi kumpulan kolom capabilities boolean yang digunakan untuk menunjukkan apakah tindakan dapat dilakukan pada file.

Batasan 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 informasi selengkapnya, lihat Kemampuan.

Untuk contoh pengambilan file capabilities, lihat Memverifikasi izin pengguna.

Mencegah pengguna mendownload, mencetak, atau menyalin file Anda

Anda dapat membatasi cara pengguna dengan izin role=commenter atau role=reader dapat mendownload, mencetak, dan menyalin file dalam Drive, Dokumen, Spreadsheet, dan Slide.

Untuk menghapus opsi mendownload, mencetak, dan menyalin file, gunakan metode files.update dengan kolom boolean copyRequiresWriterPermission ditetapkan ke true.