ปกป้องเนื้อหาไฟล์

Google Drive API รองรับวิธีต่างๆ ในการป้องกันไม่ให้แก้ไขไฟล์ ซึ่งรวมถึงการจำกัดเนื้อหาไฟล์และการห้ามไม่ให้มีตัวเลือกในการดาวน์โหลด พิมพ์ หรือคัดลอกไฟล์

กำหนดให้ไฟล์เป็นแบบอ่านอย่างเดียวด้วยการจำกัดเนื้อหาของไดรฟ์

คุณสามารถเพิ่มการจำกัดเนื้อหาในไฟล์ Google ไดรฟ์เพื่อป้องกันไม่ให้ผู้ใช้ดำเนินการต่อไปนี้

  • การแก้ไขชื่อ
  • การแก้ไขเนื้อหา
  • การอัปโหลดการแก้ไข
  • การเพิ่มหรือแก้ไขความคิดเห็น

การใช้การจำกัดเนื้อหาเป็นกลไกที่ช่วยให้เนื้อหาในไดรฟ์เป็นแบบอ่านอย่างเดียวได้โดยไม่ต้องเปลี่ยนสิทธิ์ในการเข้าถึงของรายการนั้น ซึ่งหมายความว่าไม่ใช่การจํากัดการเข้าถึง แม้ว่าผู้ใช้จะแก้ไขเนื้อหาของไฟล์ไม่ได้ แต่ยังคงดำเนินการอื่นๆ ได้ตามความระดับการเข้าถึง (เช่น ผู้ใช้ที่มีสิทธิ์แก้ไขจะยังย้ายรายการหรือเปลี่ยนการตั้งค่าการแชร์ได้)

หากต้องการเพิ่มหรือนำการจำกัดเนื้อหาในไฟล์ในไดรฟ์ออก ผู้ใช้ต้องมีสิทธิ์ที่เกี่ยวข้อง สำหรับไฟล์หรือโฟลเดอร์ในไดรฟ์ของฉันหรือไดรฟ์ที่แชร์ที่มีcapabilities.canModifyEditorContentRestriction คุณต้องกำหนดrole=writer สำหรับไฟล์หรือโฟลเดอร์ในไดรฟ์ของฉันหรือไดรฟ์ที่แชร์ที่มีownerRestrictedการจำกัดเนื้อหา คุณต้องเป็นเจ้าของไฟล์หรือมีrole=organizer หากต้องการดูรายการที่มีการจำกัดเนื้อหา ผู้ใช้ต้องมีแพ็กเกจ role=reader ขึ้นไป โปรดดูรายการบทบาททั้งหมดที่หัวข้อบทบาทและสิทธิ์ หากต้องการเปลี่ยนสิทธิ์ในไฟล์ โปรดดูหัวข้อเปลี่ยนสิทธิ์

คุณสามารถใช้ช่องบูลีน contentRestrictions.readOnly ในทรัพยากร files เพื่อตั้งค่าการจำกัดเนื้อหาได้ โปรดทราบว่าการตั้งค่าการจำกัดเนื้อหาในรายการหนึ่งจะเขียนทับการตั้งค่าที่มีอยู่

สถานการณ์สำหรับการจำกัดเนื้อหา

ข้อจำกัดเนื้อหาในรายการไดรฟ์จะส่งสัญญาณให้ผู้ใช้ทราบว่าไม่ควรเปลี่ยนแปลงเนื้อหา ซึ่งอาจเกิดจากสาเหตุต่อไปนี้

  • หยุดการทำงานในเอกสารที่ทำงานร่วมกันชั่วคราวระหว่างระยะเวลาทบทวนหรือตรวจสอบ
  • การตั้งค่ารายการเป็นสถานะที่สรุปผลแล้ว เช่น ได้รับอนุมัติ
  • การป้องกันการเปลี่ยนแปลงระหว่างการประชุมที่มีความละเอียดอ่อน
  • การห้ามการเปลี่ยนแปลงภายนอกสำหรับเวิร์กโฟลว์ที่ระบบอัตโนมัติจัดการ
  • การจํากัดการแก้ไขโดย Google Apps Script และส่วนเสริม Google Workspace
  • หลีกเลี่ยงการแก้ไขเอกสารโดยไม่ตั้งใจ

อย่างไรก็ตาม โปรดทราบว่าแม้ว่าการจำกัดเนื้อหาจะช่วยจัดการเนื้อหาได้ แต่ก็ไม่ได้หมายความว่าจะป้องกันไม่ให้ผู้ใช้ที่มีสิทธิ์เพียงพอทำงานกับรายการต่อไป นอกจากนี้ การดำเนินการนี้ไม่ใช่วิธีสร้างระเบียนที่แก้ไขไม่ได้ การจำกัดเนื้อหาในไดรฟ์จะเปลี่ยนแปลงได้ ดังนั้นการจำกัดเนื้อหาในรายการหนึ่งจึงไม่ได้รับประกันว่ารายการจะไม่มีการเปลี่ยนแปลง

จัดการไฟล์ที่มีข้อจำกัดด้านเนื้อหา

Google เอกสาร, Google ชีต และ Google สไลด์ รวมถึงไฟล์อื่นๆ ทั้งหมดอาจมีข้อจำกัดด้านเนื้อหา

การจำกัดเนื้อหาของรายการจะป้องกันไม่ให้มีการเปลี่ยนแปลงชื่อและเนื้อหาของรายการนั้น ซึ่งรวมถึง

  • ความคิดเห็นและคำแนะนำ (ในเอกสาร ชีต สไลด์ และไฟล์ไบนารี)
  • การแก้ไขไฟล์ไบนารี
  • ข้อความและการจัดรูปแบบในเอกสาร
  • ข้อความหรือสูตรในชีต เลย์เอาต์ชีต และอินสแตนซ์ในชีต
  • เนื้อหาทั้งหมดในสไลด์ รวมถึงลำดับและจำนวนสไลด์

ไฟล์บางประเภทต้องไม่มีข้อจำกัดด้านเนื้อหา ตัวอย่างบางส่วนมีดังนี้

เพิ่มการจำกัดเนื้อหา

หากต้องการเพิ่มการจำกัดเนื้อหาไฟล์ ให้ใช้เมธอด files.update โดยตั้งค่าช่อง contentRestrictions.readOnly เป็น true เพิ่มreason (ไม่บังคับ) เพื่อระบุเหตุผลที่เพิ่มข้อจำกัด เช่น "สัญญาสรุปแล้ว" ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มการจำกัดเนื้อหา

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;
  }
}

แทนที่ FILE_ID ด้วย fileId ของไฟล์ที่ต้องการแก้ไข

เมื่อเรียกใช้โค้ดตัวอย่าง ไฟล์จะถูกจำกัดเนื้อหาและสัญลักษณ์แม่กุญแจ () จะปรากฏข้างชื่อไฟล์ภายในอินเทอร์เฟซผู้ใช้ของ Google ไดรฟ์ (UI) ไฟล์จะเปลี่ยนเป็นแบบอ่านอย่างเดียว

ไฟล์ที่มีการจำกัดเนื้อหาภายในรายการไฟล์ในไดรฟ์
ภาพที่ 1 ไฟล์ที่มีการจำกัดเนื้อหาภายในรายการไฟล์ในไดรฟ์

นำการจำกัดเนื้อหาออก

หากต้องการนำการจำกัดเนื้อหาไฟล์ออก ให้ใช้เมธอด files.update โดยตั้งค่าช่อง contentRestrictions.readOnly เป็น false ตัวอย่างโค้ดต่อไปนี้แสดงวิธีนำข้อจำกัดเนื้อหาออก

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;
  }
}

แทนที่ FILE_ID ด้วย fileId ของไฟล์ที่คุณต้องการแก้ไข

เมื่อคุณเรียกใช้โค้ดตัวอย่าง ไฟล์จะไม่ถูกจำกัดเนื้อหาอีกต่อไป

นอกจากนี้ คุณยังใช้ UI ของไดรฟ์เพื่อนำการจำกัดเนื้อหาออกและอนุญาตให้แก้ไขเนื้อหาได้ (หากคุณมีสิทธิ์ที่ถูกต้อง) โดยคุณดำเนินการได้ 2 วิธีดังนี้

  1. ในไดรฟ์ ให้คลิกขวาที่ไฟล์ที่มีการจำกัดเนื้อหา แล้วคลิกปลดล็อก

    นำข้อจำกัดเนื้อหาของไฟล์ภายในรายการไฟล์ในไดรฟ์ออก
    รูปที่ 2 นำข้อจำกัดเนื้อหาของไฟล์ภายในรายการไฟล์ในไดรฟ์ออก
  2. เปิดไฟล์ที่มีการจำกัดเนื้อหา แล้วคลิก (โหมดล็อกขณะคุมสอบ) > ปลดล็อกไฟล์

    นำข้อจำกัดเนื้อหาของไฟล์ภายในเอกสารออก
    รูปที่ 3 นำข้อจำกัดเนื้อหาของไฟล์ภายในเอกสารออก

ตรวจสอบการจำกัดเนื้อหา

หากต้องการตรวจสอบการจํากัดเนื้อหา ให้ใช้เมธอด files.get กับช่องที่แสดงผล contentRestrictions ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตรวจสอบสถานะการจำกัดเนื้อหา

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;
  }
}

แทนที่ FILE_ID ด้วย fileId ของไฟล์ที่ต้องการตรวจสอบ

เมื่อคุณเรียกใช้โค้ดตัวอย่าง เมธอดจะแสดงทรัพยากร ContentRestriction หากมี

เพิ่มข้อจำกัดด้านเนื้อหาที่มีเพียงเจ้าของไฟล์เท่านั้นที่จะแก้ไขได้

หากต้องการเพิ่มข้อจำกัดเนื้อหาของไฟล์เพื่อให้มีเพียงเจ้าของไฟล์เท่านั้นที่เปิด/ปิดกลไกได้ ให้ใช้เมธอด files.update โดยตั้งค่าช่องบูลีน contentRestrictions.ownerRestricted เป็น true ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มการจำกัดเนื้อหาสำหรับผู้เป็นเจ้าของไฟล์เท่านั้น

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;
  }
}

แทนที่ FILE_ID ด้วย fileId ของไฟล์ที่ต้องการแก้ไข

เมื่อคุณเรียกใช้โค้ดตัวอย่าง ไฟล์จะถูกจำกัดเนื้อหาและมีเพียงเจ้าของไฟล์เท่านั้นที่จะนำออกได้ หากคุณเป็นเจ้าของไฟล์ สัญลักษณ์แม่กุญแจที่ทำงานอยู่ () จะปรากฏข้างชื่อไฟล์ใน หากคุณไม่ใช่เจ้าของ สัญลักษณ์แม่กุญแจจะสลัว

หากต้องการนำ Flag ownerRestricted ออก ให้ใช้เมธอด files.update โดยตั้งค่าฟิลด์ contentRestrictions.ownerRestricted เป็น false

ความสามารถด้านการจำกัดเนื้อหา

ทรัพยากร files มีชุดฟิลด์บูลีน capabilities ที่ใช้เพื่อระบุว่าสามารถดําเนินการกับไฟล์ได้หรือไม่

การจำกัดเนื้อหามีcapabilitiesดังต่อไปนี้

ดูข้อมูลเพิ่มเติมได้ที่ความสามารถ

ดูตัวอย่างการเรียกข้อมูลไฟล์ capabilities ได้ที่ยืนยันสิทธิ์ของผู้ใช้

ป้องกันไม่ให้ผู้ใช้ดาวน์โหลด พิมพ์ หรือคัดลอกไฟล์

คุณสามารถจำกัดวิธีที่ผู้ใช้ที่มีสิทธิ์ role=commenter หรือ role=reader ดาวน์โหลด พิมพ์ และคัดลอกไฟล์ภายในไดรฟ์ เอกสาร ชีต และสไลด์ได้

หากต้องการนำตัวเลือกในการดาวน์โหลด พิมพ์ และคัดลอกไฟล์ออก ให้ใช้เมธอด files.update โดยตั้งค่าฟิลด์บูลีน copyRequiresWriterPermission เป็น true