حماية محتوى الملف

تتيح Google Drive API عدة طرق لمنع تعديل الملفات، بما في ذلك حظر محتوى الملفات وحظر خيار تنزيل الملفات أو طباعتها أو نسخها.

جعل الملفات للقراءة فقط من خلال قيود المحتوى في Drive

يمكنك إضافة قيود على المحتوى إلى ملف على Google Drive لمنع المستخدمين من تنفيذ ما يلي:

  • تعديل العنوان
  • إجراء تعديلات على المحتوى
  • تحميل نسخة سابقة
  • إضافة تعليقات أو تعديلها

إنّ تطبيق قيود المحتوى هو آلية تسمح بجعل محتوى أحد ملفّات Drive للقراءة فقط بدون تغيير أذونات الوصول إلى الملف. وهذا يعني أنّه ليس تقييدًا على الوصول. على الرغم من أنّه لا يمكن للمستخدمين تعديل محتوى الملف، يبقى بإمكانهم تنفيذ عمليات أخرى استنادًا إلى مستوى الوصول (على سبيل المثال، لا يزال بإمكان المستخدم الذي لديه إذن التعديل نقل عنصر أو تغيير إعدادات مشاركته).

لإضافة قيود على المحتوى في ملف على Drive أو إزالتها، يجب أن يمتلك المستخدم الأذونات المرتبطة. بالنسبة إلى ملف أو مجلد في "ملفاتي" أو مساحة تخزين سحابي مشتركة تم منحهما capabilities.canModifyEditorContentRestriction، يجب أن يكون لديك إذنrole=writer. بالنسبة إلى ملف أو مجلد في "ملفاتي" أو مساحة تخزين سحابي مشتركة تم تطبيق ownerRestricted قيود على المحتوى فيها، يجب أن تكون مالك الملف أو أن يكون لديكrole=organizer. للاطّلاع على عنصر يتضمّن قيودًا على المحتوى، يجب أن يكون لدى المستخدمين role=reader أو إصدار أحدث. للحصول على قائمة كاملة بالأدوار، يُرجى الاطّلاع على الأدوار والأذونات. لتغيير الأذونات في ملف، راجِع مقالة تغيير الأذونات.

يمكنك استخدام الحقل المنطقي contentRestrictions.readOnly في مورد files لضبط قيود على المحتوى. يُرجى العِلم أنّ ضبط قيود على المحتوى في عنصر ما يؤدي إلى إلغاء القيود الحالية.

سيناريوهات قيود المحتوى

يشير فرض قيود على المحتوى في ملف على Drive إلى المستخدمين بأنّه ينبغي عدم تغيير المحتوى. يمكن أن يرجع ذلك إلى بعض الأسباب التالية:

  • إيقاف العمل مؤقتًا على مستند تعاوني خلال فترات المراجعة أو التدقيق
  • ضبط عنصر على حالة نهائية، مثل "موافَق عليه"
  • منع التغييرات أثناء اجتماع حسّاس
  • حظر التغييرات الخارجية على سير العمل التي تتعامل معها الأنظمة الآلية
  • تقييد التعديلات من خلال إضافات Google Apps Script وGoogle Workspace
  • تجنُّب إجراء تعديلات غير مقصودة على مستند

يُرجى العلم أنّه على الرغم من أنّ قيود المحتوى يمكن أن تساعد في إدارة المحتوى، إلا أنّها ليست مقصودة لمنع المستخدمين الذين لديهم أذونات كافية من مواصلة العمل على أحد العناصر. بالإضافة إلى ذلك، لا تُعدّ هذه الطريقة طريقة لإنشاء سجلّ لا يمكن تغييره. إنّ القيود المفروضة على المحتوى في Drive قابلة للتغيير، لذا فإنّ فرض قيد على محتوى ملف لا يضمن عدم تغييره مطلقًا.

إدارة الملفات التي تتضمّن قيودًا على المحتوى

يمكن أن تحتوي "مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google"، بالإضافة إلى جميع الملفات الأخرى، على قيود على المحتوى.

تؤدي القيود المفروضة على المحتوى إلى منع إجراء تغييرات على عنوان العنصر ومحتواه، بما في ذلك:

  • التعليقات والاقتراحات (في "مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google" والملفات الثنائية)
  • النُسخ السابقة من ملف ثنائي
  • النص والتنسيق في "مستندات Google"
  • النصوص أو الصِيَغ في "جداول بيانات 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 Drive (UI). أصبح الملف للقراءة فقط.

ملف يتضمّن قيودًا على المحتوى ضمن قائمة ملفات Drive
الشكل 1. ملف يتضمّن قيودًا على المحتوى ضمن قائمة ملفات Drive

إزالة قيود على المحتوى

لإزالة قيود على محتوى الملف، استخدِم الطريقة 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 للملف الذي تريد تعديله.

عند تشغيل نموذج الرمز البرمجي، لن يعود الملف محظورًا بسبب المحتوى.

يمكنك أيضًا استخدام واجهة مستخدم Drive لإزالة القيود المفروضة على المحتوى و السماح بتعديل المحتوى (شرط أن تكون لديك الأذونات الصحيحة). هناك خياران للقيام بذلك:

  1. في Drive، انقر بزر الماوس الأيمن على الملف الذي تم فرض قيود على محتواه، ثم انقر على فتح القفل .

    إزالة قيود على محتوى ملف ضمن قائمة ملفات Drive
    الشكل 2. إزالة قيود على محتوى ملف ضمن قائمة ملفات Drive
  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 للملف الذي تريد تعديله.

عند تشغيل نموذج الرمز البرمجي، يتم حظر المحتوى في الملف ولا يمكن إلا لأصحاب الملف إزالته. إذا كنت مالك الملف، سيظهر رمز قفل نشط () بجانب اسم الملف في واجهة مستخدم Drive (UI). إذا لم تكن مالك الجهاز، يظهر رمز القفل بشكل خافت.

لإزالة العلامة ownerRestricted، استخدِم الطريقة files.update مع ضبط الحقل contentRestrictions.ownerRestricted على false.

إمكانات قيود المحتوى

يحتوي مورد files على مجموعة من حقول capabilities المنطقية المستخدَمة للإشارة إلى ما إذا كان يمكن تنفيذ إجراء على ملف.

تتضمّن قيود المحتوى capabilities التالية:

  • capabilities.canModifyEditorContentRestriction: ما إذا كان بإمكان المستخدم الحالي إضافة قيود على المحتوى أو تعديلها
  • capabilities.canModifyOwnerContentRestriction: ما إذا كان بإمكان المستخدم الحالي إضافة أو تعديل قيود مالك المحتوى
  • capabilities.canRemoveContentRestriction: ما إذا كان بإمكان المستخدم الحالي إزالة قيود المحتوى المطبَّقة (في حال توفّرها)

لمزيد من المعلومات، يُرجى الاطّلاع على الإمكانات.

للحصول على مثال على استرداد الملف capabilities، اطّلِع على التحقّق من أذونات المستخدم.

منع المستخدمين من تنزيل ملفك أو طباعته أو نسخه

يمكنك الحد من إمكانية تنزيل الملفات وطباعتها ونسخها داخل Drive و"مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google" من قِبل المستخدمين الذين لديهم أذونات role=commenter أو role=reader.

لإزالة خيارات تنزيل الملفات وطباعتها ونسخها، استخدِم الأسلوب files.update مع ضبط الحقل المنطقي copyRequiresWriterPermission على true.