تتيح 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"
- كل المحتوى في "العروض التقديمية"، بالإضافة إلى ترتيب ال العروض التقديمية وعدد الشرائح
لا يمكن أن تتضمّن أنواع ملفات معيّنة قيودًا على المحتوى. في ما يلي بعض الأمثلة:
- نماذج 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، انقر بزر الماوس الأيمن على الملف الذي تم فرض قيود على محتواه، ثم انقر على فتح القفل
.افتح الملف الذي تم فرض قيود على محتواه وانقر على (وضع القفل) > فتح قفل الملف.
التحقّق من وجود قيود على المحتوى
للتحقّق من وجود قيود على المحتوى، استخدِم الأسلوب
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
.