تتيح Google Drive API عدة طرق لمنع تعديل الملفات، بما في ذلك تقييد محتوى الملف ومنع خيار تنزيل الملفات أو طباعتها أو نسخها.
جعل الملفات للقراءة فقط باستخدام قيود محتوى Drive
يمكنك إضافة قيد على محتوى ملف في Google Drive لمنع المستخدمين من إجراء ما يلي:
- تعديل العنوان
- إجراء تعديلات على المحتوى
- تحميل نسخة معدَّلة
- إضافة تعليقات أو تعديلها
لا يمثل قيد المحتوى قيدًا على الوصول. على الرغم من أنّه لا يمكن للمستخدمين تعديل محتوى الملف، تظل العمليات الأخرى مسموحًا بها، استنادًا إلى مستوى وصولهم. على سبيل المثال، يمكن لمستخدم لديه إذن التعديل نقل عنصر أو تغيير إعدادات مشاركته.
لإضافة قيد على محتوى ملف في Drive أو إزالته، يجب أن يكون لدى المستخدم
الأذونات المرتبطة permissions. بالنسبة إلى ملف أو مجلد في "ملفاتي" أو مساحة تخزين سحابي مشتركة تتضمّن capabilities.canModifyEditorContentRestriction، يجب أن يكون لديك role=writer. بالنسبة إلى ملف أو مجلد في "ملفاتي" أو مساحة تخزين سحابي مشتركة تتضمّن قيد محتوى ownerRestricted، يجب أن تكون مالك الملف أو أن يكون لديك role=organizer. لعرض عنصر يتضمّن قيدًا على المحتوى، يجب أن يكون لدى المستخدمين role=reader أو دور أعلى. للاطّلاع على قائمة كاملة بالأدوار، يُرجى مراجعة الأدوار و
الأذونات. لتعديل الأذونات في ملف، يُرجى مراجعة
تعديل الأذونات.
يمكنك استخدام حقل contentRestrictions.readOnly المنطقي في مصدر files لضبط قيد على المحتوى. يُرجى العِلم أنّ ضبط قيد على محتوى عنصر يؤدي إلى استبدال القيد الحالي.
سيناريوهات قيود المحتوى
يشير قيد المحتوى في عنصر من عناصر Drive إلى المستخدمين بأنّه لا يجب تغيير المحتويات. قد يرجع ذلك إلى بعض الأسباب التالية:
- إيقاف العمل على مستند تعاوني مؤقتًا أثناء فترات المراجعة أو التدقيق
- ضبط حالة العنصر على "نهائي"، مثل "موافَق عليه"
- منع إجراء تغييرات أثناء اجتماع حسّاس
- منع إجراء تغييرات خارجية لمهام سير العمل التي تتعامل معها الأنظمة الآلية
- تقييد التعديلات التي تجريها برمجة تطبيقات Google وإضافات Google Workspace
- تجنُّب إجراء تعديلات غير مقصودة على مستند
يُرجى العِلم أنّه على الرغم من أنّ قيود المحتوى يمكن أن تساعد في إدارة المحتوى، فإنّها ليست مخصّصة لمنع المستخدمين الذين لديهم أذونات كافية من مواصلة العمل على عنصر. بالإضافة إلى ذلك، لا تمثّل هذه القيود طريقة لإنشاء سجلّ غير قابل للتغيير. قيود محتوى Drive قابلة للتعديل، لذا لا يضمن قيد المحتوى في عنصر عدم تغيير العنصر مطلقًا.
إدارة الملفات التي تتضمّن قيود المحتوى
يمكن أن تحتوي "مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google"، بالإضافة إلى جميع الملفات الأخرى، على قيود على المحتوى.
يمنع قيد المحتوى في عنصر إجراء تغييرات على عنوانه ومحتواه، بما في ذلك:
- التعليقات والاقتراحات (في "مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google" والملفات الثنائية)
- النسخ المعدَّلة من ملف ثنائي
- النص والتنسيق في "مستندات Google"
- النص أو الصيغ في "جداول بيانات Google" وتنسيق "جداول بيانات Google" والمثيلات في "جداول بيانات Google"
- كل المحتوى في "العروض التقديمية من Google"، بالإضافة إلى ترتيب الشرائح وعددها
لا يمكن أن تحتوي أنواع ملفات معيّنة على قيد على المحتوى. في ما يلي بعض الأمثلة:
- نماذج Google
- مواقع Google
- رسومات Google
- الاختصارات واختصارات الجهات الخارجية. لمزيد من المعلومات، يُرجى مراجعة إنشاء ملف اختصار إلى محتوى يخزّنه تطبيقك وإنشاء اختصار إلى ملف في Drive.
إضافة قيد على المحتوى
لإضافة قيد على محتوى ملف، استخدِم الـ
files.update مع ضبط الـ
contentRestrictions.readOnly على true. أضِف reason لـ
سبب إضافة القيد، مثل "عقد نهائي". تعرض عيّنة التعليمات البرمجية التالية كيفية إضافة قيد على المحتوى:
جافا
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. تعرض عيّنة التعليمات البرمجية التالية كيفية إزالة قيد على المحتوى:
جافا
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 الذي يتم عرضه. تعرض عيّنة التعليمات البرمجية التالية كيفية التحقّق من حالة قيد على المحتوى:
جافا
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. تعرض عيّنة التعليمات البرمجية التالية كيفية إضافة قيد على المحتوى لمالكي الملفات فقط:
جافا
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".
لتحديد ما إذا كان بإمكان المستخدم تغيير قيود التنزيل التي يفرضها المالك أو المنظِّم على ملف، تحقَّق من الحقل المنطقي 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 فقط |