تتيح 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" و"جداول بيانات 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
.