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

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

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

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

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

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

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

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

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

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

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

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

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

يمكن أن تحتوي "مستندات 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، راجِع التحقق من أذونات المستخدم.

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

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

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