تتيح 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
- الاختصارات والاختصارات التابعة للجهات الخارجية. ولمزيد من المعلومات، يُرجى الاطّلاع على إنشاء ملف اختصار للمحتوى المخزّن من خلال تطبيقك وإنشاء اختصار إلى ملف 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
، راجِع التحقق من أذونات
المستخدم.
منع المستخدمين من تنزيل ملفك أو طباعته أو نسخه
يمكنك تحديد كيف يمكن للمستخدمين الذين لديهم أذونات role=commenter
أو role=reader
تنزيل الملفات وطباعتها ونسخها في Drive و"مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google".
لإزالة خيارات تنزيل الملفات وطباعتها ونسخها، استخدِم الإجراء
files.update
مع ضبط الحقل
copyRequiresWriterPermission
المنطقي على true
.