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

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

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

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

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

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

หากต้องการเพิ่มหรือนำการจำกัดเนื้อหาในไฟล์ในไดรฟ์ออก ผู้ใช้ต้องมีpermissionsที่เกี่ยวข้อง สำหรับ ไฟล์หรือโฟลเดอร์ในไดรฟ์ของฉันหรือไดรฟ์ที่แชร์ที่มี 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 ของไฟล์ที่ต้องการ แก้ไข

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

ไฟล์ที่มีการจำกัดเนื้อหาภายในรายการไฟล์ในไดรฟ์
รูปที่ 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 ของไฟล์ที่ต้องการ แก้ไข

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

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

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

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

การจำกัดเนื้อหาประกอบด้วยcapabilitiesต่อไปนี้

ดูข้อมูลเพิ่มเติมได้ที่ทำความเข้าใจความสามารถของไฟล์

ดูตัวอย่างการดึงข้อมูลไฟล์ capabilities ได้ที่รับความสามารถของไฟล์

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

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

หากต้องการดูว่าผู้ใช้เปลี่ยนเจ้าของหรือข้อจำกัดในการดาวน์โหลดที่เจ้าของหรือผู้จัดการใช้กับไฟล์ได้หรือไม่ ให้ตรวจสอบฟิลด์บูลีน capabilities.canChangeItemDownloadRestriction หากตั้งค่า capabilities.canChangeItemDownloadRestriction เป็น true คุณจะใช้ข้อจำกัด การดาวน์โหลดกับไฟล์ได้ ดูข้อมูลเพิ่มเติมได้ที่ทำความเข้าใจ ความสามารถของไฟล์

หากต้องการใช้ข้อจำกัดในการดาวน์โหลดกับไฟล์ ให้ตั้งค่าฟิลด์ downloadRestrictions โดยใช้เมธอด files.update คุณตั้งค่าฟิลด์ได้ โดยใช้ออบเจ็กต์ DownloadRestrictionsMetadata

ออบเจ็กต์ DownloadRestrictionsMetadata มี 2 ฟิลด์ ได้แก่ itemDownloadRestriction และ effectiveDownloadRestrictionWithContext ทั้ง 2 ฟิลด์สามารถอ่านได้ แต่ตั้งค่าได้เฉพาะ itemDownloadRestriction ฟิลด์ itemDownloadRestrictionจะแสดงผลออบเจ็กต์ DownloadRestriction ออบเจ็กต์ DownloadRestriction มีฟิลด์บูลีนแยกกัน 2 รายการ ได้แก่ restrictedForReaders และ restrictedForWriters

เมื่อตั้งค่าฟิลด์ itemDownloadRestriction เจ้าของหรือผู้จัดจะใช้ข้อจำกัดในการดาวน์โหลดของไฟล์โดยตรง โดยจะไม่พิจารณา การตั้งค่าไดรฟ์ที่แชร์หรือกฎการป้องกันข้อมูลรั่วไหล (DLP) ดูข้อมูลเพิ่มเติมได้ที่เกี่ยวกับ DLP

หากคุณอัปเดตฟิลด์ itemDownloadRestriction โดยตั้งค่าฟิลด์ restrictedForWriters เป็น true แสดงว่า restrictedForReaders เป็น true ในทำนองเดียวกัน การตั้งค่า restrictedForWriters เป็น true และ restrictedForReaders เป็น false จะเทียบเท่ากับการตั้งค่าทั้ง restrictedForWriters และ restrictedForReaders เป็น true

สำหรับฟิลด์ effectiveDownloadRestrictionWithContext ระบบจะใช้ข้อจำกัดในการดาวน์โหลดกับไฟล์ และจะพิจารณาการตั้งค่าข้อจำกัดและกฎ DLP ทั้งหมด

ฟิลด์ effectiveDownloadRestrictionWithContext สามารถตั้งค่าเป็น restrictedForWriters หรือ restrictedForReaders หากมีการตั้งค่าการจำกัดการดาวน์โหลดหรือการคัดลอกสำหรับบทบาทที่เกี่ยวข้องจากการตั้งค่าไฟล์ การตั้งค่าไดรฟ์ที่แชร์ หรือกฎ DLP (รวมถึงกฎที่มีบริบท) ระบบจะตั้งค่าเป็น true มิฉะนั้นจะเป็น false

ความเข้ากันได้แบบย้อนหลัง

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

หากต้องการใช้ฟิลด์บูลีน copyRequiresWriterPermission ฟังก์ชันการทำงานจะแตกต่างกันทั้งสำหรับการอ่านจากฟิลด์และการเขียนไปยังฟิลด์

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

การตั้งค่าฟิลด์ copyRequiresWriterPermission เป็น false จะอัปเดตทั้งฟิลด์ restrictedForWriters และ restrictedForReaders เป็น false ซึ่งหมายความว่าระบบจะนำการตั้งค่าการจำกัดการดาวน์โหลดหรือการคัดลอกออกสำหรับผู้ใช้ทั้งหมด

ฟิลด์ที่ควบคุมฟีเจอร์การดาวน์โหลด การพิมพ์ และการคัดลอก

ตารางต่อไปนี้แสดงฟิลด์ทรัพยากร files ที่มีผลต่อฟังก์ชันการดาวน์โหลด การพิมพ์ และการคัดลอก

ช่อง คำอธิบาย เวอร์ชัน
capabilities.canCopy ผู้ใช้ปัจจุบันคัดลอกไฟล์ได้หรือไม่ v2 และ v3
capabilities.canDownload ระบุว่าผู้ใช้ปัจจุบันดาวน์โหลดไฟล์ได้หรือไม่ v2 และ v3
capabilities.canChangeCopyRequiresWriterPermission ดูว่าผู้ใช้ปัจจุบันเปลี่ยนcopyRequiresWriterPermissionข้อจำกัดของไฟล์ได้หรือไม่ v2 และ v3
capabilities.canChangeItemDownloadRestriction ดูว่าผู้ใช้ปัจจุบันเปลี่ยนข้อจำกัดในการดาวน์โหลดไฟล์ได้หรือไม่ v3 เท่านั้น
copyRequiresWriterPermission ควรปิดใช้ตัวเลือกในการคัดลอก พิมพ์ หรือดาวน์โหลดไฟล์นี้สำหรับผู้อ่านและผู้แสดงความคิดเห็นหรือไม่ v2 และ v3
downloadRestrictions ข้อจำกัดการดาวน์โหลดที่ใช้กับไฟล์ v3 เท่านั้น