تتيح واجهة برمجة التطبيقات Google Drive API عدة طرق لمنع تعديل الملفات، بما في ذلك تقييد محتوى الملفات ومنع خيار تنزيل الملفات أو طباعتها أو نسخها.
جعل الملفات للقراءة فقط باستخدام قيود المحتوى في Drive
يمكنك إضافة قيود على المحتوى في ملف Google Drive لمنع المستخدمين من إجراء ما يلي:
- تعديل العنوان
- إجراء تعديلات على المحتوى
- تحميل نسخة معدَّلة
- إضافة تعليقات أو تعديلها
لا يشكّل حظر المحتوى حظرًا للوصول. مع أنّ المستخدمين لا يمكنهم تعديل محتوى الملف، إلا أنّه لا يزال بإمكانهم إجراء عمليات أخرى استنادًا إلى مستوى الوصول لديهم. على سبيل المثال، يمكن للمستخدم الذي لديه إذن تعديل نقل عنصر أو تغيير إعدادات مشاركته.
لإضافة قيود على المحتوى أو إزالتها من ملف في Drive، يجب أن يتوفّر لدى المستخدم permissions
المرتبط. بالنسبة إلى ملف أو مجلد في "ملفاتي" أو في مساحة تخزين سحابي مشتركة يتضمّن 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"
- كل المحتوى في "العروض التقديمية من Google"، بالإضافة إلى ترتيب الشرائح وعددها
لا يمكن أن تتضمّن أنواع ملفات معيّنة قيودًا على المحتوى. في ما يلي بعض الأمثلة:
- نماذج Google
- مواقع Google
- رسومات Google
- الاختصارات واختصارات الجهات الخارجية لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء ملف اختصار إلى المحتوى المخزَّن بواسطة تطبيقك وإنشاء اختصار إلى ملف في Drive.
إضافة قيود على المحتوى
لإضافة قيود على محتوى ملف، استخدِم طريقة
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). الملف الآن للقراءة فقط.
) بجانب اسم الملف ضمنإزالة قيود المحتوى
لإزالة قيود محتوى ملف، استخدِم طريقة 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 لإزالة قيود المحتوى والسماح بتعديله (شرط أن تكون لديك الأذونات المناسبة). هناك خياران لإجراء ذلك:
في Drive، انقر بزر الماوس الأيمن على الملف الذي يتضمّن قيودًا على المحتوى، ثم انقر على فتح القفل
.الشكل 2. إزالة قيود على محتوى ملف ضمن قائمة ملفات في Drive افتح الملف الذي يتضمّن قيودًا على المحتوى وانقر على (وضع القفل) > فتح قفل الملف.
الشكل 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. إذا لم تكن المالك، سيظهر رمز القفل باهتًا.
) بجانب اسم الملف ضمنلإزالة العلامة ownerRestricted
، استخدِم الطريقة files.update
مع ضبط الحقل contentRestrictions.ownerRestricted
على false
.
إمكانات تقييد المحتوى
يحتوي مورد files
على مجموعة من حقول capabilities
المنطقية المستخدَمة للإشارة إلى ما إذا كان يمكن تنفيذ إجراء على ملف.
تتضمّن قيود المحتوى ما يلي capabilities
:
-
capabilities.canModifyEditorContentRestriction
: تحدّد هذه السمة ما إذا كان بإمكان المستخدم الحالي إضافة قيود على المحتوى أو تعديلها. capabilities.canModifyOwnerContentRestriction
: تحدّد ما إذا كان بإمكان المستخدم الحالي إضافة قيود على المحتوى يفرضها المالك أو تعديلها.capabilities.canRemoveContentRestriction
: تحدّد هذه السمة ما إذا كان بإمكان المستخدم الحالي إزالة قيود المحتوى المفروضة (إذا كانت متوفّرة).
لمزيد من المعلومات، يُرجى الاطّلاع على التعرّف على إمكانات الملف.
للاطّلاع على مثال على استرداد الملف capabilities
، يُرجى الاطّلاع على الحصول على إمكانات الملف.
منع المستخدمين من تنزيل ملفك أو طباعته أو نسخه
يمكنك فرض قيود على كيفية تنزيل المستخدمين للملفات وطباعتها ونسخها داخل Drive و"مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google".
لتحديد ما إذا كان بإمكان المستخدم تغيير المالك أو القيود التي يفرضها المنظّم على تنزيل ملف، تحقَّق من الحقل المنطقي capabilities.canChangeItemDownloadRestriction
. إذا تم ضبط
capabilities.canChangeItemDownloadRestriction
على true
، يمكن تطبيق قيود التنزيل على الملف. لمزيد من المعلومات، راجِع التعرّف على إمكانات الملفات.
لتطبيق قيود التنزيل على ملف، اضبط الحقل downloadRestrictions
باستخدام الطريقة files.update
. يمكنك ضبط الحقل
باستخدام
الكائن DownloadRestrictionsMetadata
.
يحتوي العنصر DownloadRestrictionsMetadata
على حقلَين:
itemDownloadRestriction
وeffectiveDownloadRestrictionWithContext
. يمكن قراءة كلا الحقلين، ولكن لا يمكن ضبط سوى itemDownloadRestriction
. يعرض الحقل
itemDownloadRestriction
الكائن DownloadRestriction
. يحتوي العنصر DownloadRestriction
على حقلَين منطقيَين منفصلَين: restrictedForReaders
وrestrictedForWriters
.
عند ضبط الحقل itemDownloadRestriction
، يفرض المالك أو المنظّم قيود التنزيل على الملف مباشرةً. لا يأخذ في الاعتبار إعدادات المساحة المشتركة أو قواعد منع فقدان البيانات (DLP). لمزيد من المعلومات، يُرجى الاطّلاع على لمحة عن ميزة "منع فقدان البيانات".
إذا عدّلت الحقل itemDownloadRestriction
من خلال ضبط الحقل restrictedForWriters
على true
، يعني ذلك أنّ restrictedForReaders
هو true
. وبالمثل، فإنّ ضبط restrictedForWriters
على true
وrestrictedForReaders
على false
يعادل ضبط كل من restrictedForWriters
وrestrictedForReaders
على true
.
بالنسبة إلى الحقل effectiveDownloadRestrictionWithContext
، يتم تطبيق قيود التنزيل على الملف، ويراعي جميع إعدادات القيود وقواعد منع فقدان البيانات.
يمكن ضبط الحقل effectiveDownloadRestrictionWithContext
على restrictedForWriters
أو restrictedForReaders
. إذا كانت هناك أي إعدادات تقييد للتنزيل أو النسخ للأدوار المعنية من إعدادات الملف أو إعدادات مساحة التخزين السحابي المشتركة أو قواعد "منع فقدان البيانات" (بما في ذلك تلك التي تتضمّن سياقًا)، يتم ضبط القيمة على true
، وإلا تكون false
.
التوافق مع الإصدارات السابقة
ننصحك باستخدام العنصر
DownloadRestriction
لفرض الطريقة التي يمكن للمستخدمين من خلالها تنزيل الملفات وطباعتها ونسخها.
إذا كنت تريد استخدام حقل
copyRequiresWriterPermission
من النوع المنطقي، ستختلف الوظيفة عند القراءة من الحقل والكتابة فيه.
تعكس القيمة التي تم استردادها للحقل copyRequiresWriterPermission
ما إذا كان بإمكان المستخدمين الذين لديهم الإذن role=commenter
أو role=reader
تنزيل الملفات أو طباعتها أو نسخها في Drive. تعكس قيمة الحقل مجموعة إعدادات الملف أو إعدادات مساحة التخزين السحابي المشتركة أو قواعد منع فقدان البيانات. ومع ذلك، لا يشمل ذلك تقييم السياق لقواعد "منع فقدان البيانات".
يؤدي ضبط الحقل copyRequiresWriterPermission
على false
إلى تعديل الحقلين restrictedForWriters
وrestrictedForReaders
إلى false
. وهذا يعني أنّه ستتم إزالة إعدادات القيود المفروضة على التنزيل أو النسخ لجميع المستخدمين.
الحقول التي تتحكّم في ميزات التنزيل والطباعة والنسخ
يسرد الجدول التالي حقول موارد files
التي تؤثّر في وظائف التنزيل والطباعة والنسخ:
الحقل | الوصف | الإصدار |
---|---|---|
capabilities.canCopy |
تُستخدَم لتحديد ما إذا كان بإمكان المستخدم الحالي نسخ ملف. | الإصداران 2 و3 |
capabilities.canDownload |
تُستخدَم لتحديد ما إذا كان بإمكان المستخدم الحالي تنزيل ملف. | الإصداران 2 و3 |
capabilities.canChangeCopyRequiresWriterPermission |
تحدّد هذه السمة ما إذا كان بإمكان المستخدم الحالي تغيير قيود copyRequiresWriterPermission لملف. |
الإصداران 2 و3 |
capabilities.canChangeItemDownloadRestriction |
تُستخدَم لتحديد ما إذا كان بإمكان المستخدم الحالي تغيير قيود تنزيل ملف. | الإصدار 3 فقط |
copyRequiresWriterPermission |
تحديد ما إذا كان يجب إيقاف خيارات نسخ هذا الملف أو طباعته أو تنزيله للقراء والمعلّقين | الإصداران 2 و3 |
downloadRestrictions |
قيود التنزيل المطبَّقة على ملف | الإصدار 3 فقط |