محافظت از محتوای فایل

API گوگل درایو از چندین روش برای جلوگیری از تغییر فایل‌ها پشتیبانی می‌کند، از جمله محدود کردن محتوای فایل و جلوگیری از دانلود، چاپ یا کپی فایل‌ها.

با محدودیت‌های محتوای درایو، فایل‌ها را فقط خواندنی کنید

شما می‌توانید یک محدودیت محتوا به یک فایل گوگل درایو اضافه کنید تا از انجام موارد زیر توسط کاربران جلوگیری شود:

  • اصلاح عنوان
  • انجام ویرایش‌های محتوایی
  • بارگذاری یک نسخهٔ اصلاح‌شده
  • افزودن یا اصلاح نظرات

محدودیت محتوا، محدودیت دسترسی نیست. اگرچه کاربران نمی‌توانند محتوای فایل را تغییر دهند، اما بسته به سطح دسترسی‌شان، انجام سایر عملیات همچنان مجاز است. به عنوان مثال، کاربری که دسترسی ویرایش دارد، همچنان می‌تواند یک آیتم را جابجا کند یا تنظیمات اشتراک‌گذاری آن را تغییر دهد.

برای افزودن یا حذف محدودیت محتوا روی یک فایل در Drive، کاربر باید permissions مربوطه را داشته باشد. برای یک فایل یا پوشه در My Drive یا یک درایو مشترک با capabilities.canModifyEditorContentRestriction ، باید role=writer به شما اختصاص داده شده باشد. برای یک فایل یا پوشه در My Drive یا یک درایو مشترک با محدودیت محتوای ownerRestricted ، باید مالک فایل باشید یا role=organizer داشته باشید. برای مشاهده یک مورد با محدودیت محتوا، کاربران باید role=reader یا بالاتر داشته باشند. برای لیست کامل نقش‌ها، به نقش‌ها و مجوزها مراجعه کنید. برای به‌روزرسانی مجوزها روی یک فایل، به Update permissions مراجعه کنید.

شما می‌توانید از فیلد بولی contentRestrictions.readOnly در منبع files برای تنظیم محدودیت محتوا استفاده کنید. توجه داشته باشید که تنظیم محدودیت محتوا روی یک آیتم، محدودیت موجود را بازنویسی می‌کند.

سناریوهایی برای محدودیت‌های محتوا

محدودیت محتوا روی یک آیتم درایو به کاربران این پیام را می‌دهد که محتوا نباید تغییر کند. این می‌تواند به دلایل زیر باشد:

  • توقف کار روی یک سند مشترک در طول دوره‌های بررسی یا حسابرسی.
  • قرار دادن یک آیتم در حالت نهایی، مانند تایید شده.
  • جلوگیری از تغییرات در طول یک جلسه حساس.
  • ممنوعیت تغییرات خارجی برای گردش‌های کاری که توسط سیستم‌های خودکار انجام می‌شوند.
  • محدود کردن ویرایش‌ها توسط افزونه‌های Google Apps Script و Google Workspace.
  • جلوگیری از ویرایش‌های تصادفی در یک سند

البته توجه داشته باشید که اگرچه محدودیت‌های محتوا می‌توانند به مدیریت محتوا کمک کنند، اما به معنای جلوگیری از ادامه کار کاربران با مجوزهای کافی روی یک مورد نیست. علاوه بر این، راهی برای ایجاد یک رکورد تغییرناپذیر نیست. محدودیت‌های محتوای درایو قابل تغییر هستند، بنابراین محدودیت محتوا روی یک مورد تضمین نمی‌کند که آن مورد هرگز تغییر نکند.

مدیریت فایل‌ها با محدودیت‌های محتوا

فایل‌های Google Docs، Google Sheets و Google Slides و همچنین سایر فایل‌ها می‌توانند شامل محدودیت‌های محتوایی باشند.

محدودیت محتوا روی یک آیتم، مانع از تغییر عنوان و محتوای آن می‌شود، از جمله:

  • نظرات و پیشنهادات (در مورد اسناد، برگه‌ها، اسلایدها و فایل‌های باینری)
  • ویرایش‌های یک فایل باینری
  • متن و قالب‌بندی در اسناد
  • متن یا فرمول‌ها در Sheets، طرح‌بندی Sheets و نمونه‌هایی در Sheets
  • تمام محتوای اسلایدها، و همچنین ترتیب و تعداد اسلایدها

انواع خاصی از فایل‌ها نمی‌توانند شامل محدودیت محتوا باشند. چند مثال عبارتند از:

افزودن محدودیت محتوا

برای افزودن محدودیت محتوای فایل، از متد 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();

پایتون

content_restriction = {'readOnly': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

نود جی اس

/**
* 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 فایلی که می‌خواهید تغییر دهید را وارد کنید.

وقتی کد نمونه را اجرا می‌کنید، فایل از نظر محتوا محدود می‌شود و یک نماد قفل ( ) در کنار نام فایل در رابط کاربری (UI) گوگل درایو ظاهر می‌شود. اکنون فایل فقط خواندنی است.

فایلی با محدودیت محتوا در فهرست فایل‌های Drive.
شکل ۱. فایلی با محدودیت محتوا در فهرست فایل‌های درایو.

حذف محدودیت محتوا

برای حذف محدودیت محتوای فایل، از متد 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();

پایتون

content_restriction = {'readOnly': False}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

نود جی اس

/**
* 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 فایلی که می‌خواهید تغییر دهید را وارد کنید.

وقتی کد نمونه را اجرا می‌کنید، فایل دیگر محدودیت محتوا ندارد.

همچنین می‌توانید از رابط کاربری درایو برای حذف محدودیت محتوا و اجازه ویرایش محتوا استفاده کنید (البته به شرطی که مجوزهای صحیح را داشته باشید). دو گزینه برای انجام این کار وجود دارد:

  1. در درایو، روی فایلی که محدودیت محتوا دارد کلیک راست کرده و روی «Unlock کلیک کنید.

    محدودیت محتوای فایل را در فهرست فایل‌های Drive حذف کنید.
    شکل ۲. حذف محدودیت محتوای فایل در فهرست فایل‌های درایو
  2. فایلی را که محدودیت محتوا دارد باز کنید و روی (حالت قفل) > Unlock file کلیک کنید.

    محدودیت محتوای فایل را در یک سند حذف کنید.
    شکل ۳. حذف محدودیت محتوای فایل در یک سند.

بررسی محدودیت محتوا

برای بررسی محدودیت محتوا، از متد files.get به همراه فیلد contentRestrictions که برمی‌گرداند، استفاده کنید. نمونه کد زیر نحوه بررسی وضعیت محدودیت محتوا را نشان می‌دهد:

جاوا

File response = driveService.files().get("FILE_ID").setFields("contentRestrictions").execute();

پایتون

response = drive_service.files().get(fileId="FILE_ID", fields = "contentRestrictions").execute();

نود جی اس

/**
* 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();

پایتون

content_restriction = {'readOnly': True, 'ownerRestricted': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

نود جی اس

/**
* 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 با مقدار false برای فیلد contentRestrictions.ownerRestricted استفاده کنید.

قابلیت‌های محدودسازی محتوا

یک منبع files شامل مجموعه‌ای از فیلدهای capabilities بولی است که برای نشان دادن اینکه آیا می‌توان عملی را روی یک فایل انجام داد یا خیر، استفاده می‌شوند.

محدودیت‌های محتوا شامل capabilities زیر است:

  • capabilities.canModifyEditorContentRestriction : مشخص می‌کند که آیا کاربر فعلی می‌تواند محدودیت محتوا را اضافه یا تغییر دهد یا خیر.
  • capabilities.canModifyOwnerContentRestriction : مشخص می‌کند که آیا کاربر فعلی می‌تواند محدودیت محتوای مالک را اضافه یا تغییر دهد یا خیر.
  • capabilities.canRemoveContentRestriction : مشخص می‌کند که آیا کاربر فعلی می‌تواند محدودیت محتوای اعمال‌شده (در صورت وجود) را حذف کند یا خیر.

برای اطلاعات بیشتر، به بخش «درک قابلیت‌های فایل» مراجعه کنید.

برای مثالی از بازیابی capabilities فایل، به دریافت قابلیت‌های فایل مراجعه کنید.

جلوگیری از دانلود، چاپ یا کپی کردن فایل توسط کاربران

شما می‌توانید نحوه دانلود، چاپ و کپی فایل‌ها در درایو، اسناد، برگه‌ها و اسلایدها را برای کاربران محدود کنید.

برای تعیین اینکه آیا کاربر می‌تواند محدودیت‌های دانلود اعمال‌شده توسط مالک یا سازمان‌دهنده برای یک فایل را تغییر دهد، فیلد بولی capabilities.canChangeItemDownloadRestriction را بررسی کنید. اگر capabilities.canChangeItemDownloadRestriction روی true تنظیم شده باشد، محدودیت‌های دانلود می‌توانند روی فایل اعمال شوند. برای اطلاعات بیشتر، به بخش «درک قابلیت‌های فایل» مراجعه کنید.

برای اعمال محدودیت‌های دانلود روی یک فایل، فیلد downloadRestrictions با استفاده از متد files.update تنظیم کنید. می‌توانید این فیلد را با استفاده از شیء DownloadRestrictionsMetadata تنظیم کنید.

شیء DownloadRestrictionsMetadata دارای دو فیلد است: itemDownloadRestriction و effectiveDownloadRestrictionWithContext . هر دو فیلد قابل خواندن هستند اما فقط itemDownloadRestriction قابل تنظیم است. فیلد itemDownloadRestriction یک شیء DownloadRestriction را برمی‌گرداند. شیء DownloadRestriction دارای دو فیلد بولی جداگانه است: restrictedForReaders و restrictedForWriters .

هنگام تنظیم فیلد itemDownloadRestriction محدودیت دانلود فایل مستقیماً توسط مالک یا سازمان‌دهنده اعمال می‌شود. این محدودیت تنظیمات درایو مشترک یا قوانین جلوگیری از دست رفتن داده‌ها (DLP) را در نظر نمی‌گیرد. برای اطلاعات بیشتر، به «درباره DLP» مراجعه کنید.

اگر فیلد itemDownloadRestriction را با تنظیم فیلد restrictedForWriters به true به‌روزرسانی کنید، به این معنی است که restrictedForReaders true دارد. به طور مشابه، تنظیم restrictedForWriters به true و restrictedForReaders به false معادل تنظیم restrictedForWriters و restrictedForReaders به true است.

برای فیلد effectiveDownloadRestrictionWithContext محدودیت دانلود روی فایل اعمال می‌شود و تمام تنظیمات محدودیت و قوانین DLP را در نظر می‌گیرد.

فیلد effectiveDownloadRestrictionWithContext را می‌توان روی restrictedForWriters یا restrictedForReaders تنظیم کرد. اگر تنظیمات محدودیت دانلود یا کپی برای نقش‌های مربوطه از تنظیمات فایل، تنظیمات درایو مشترک یا قوانین DLP (از جمله آن‌هایی که context دارند) وجود داشته باشد، مقدار آن روی true تنظیم می‌شود، در غیر این صورت false است.

سازگاری با نسخه‌های قبلی

توصیه می‌کنیم از شیء DownloadRestriction برای اعمال کنترل بر نحوه دانلود، چاپ و کپی فایل‌ها توسط کاربران استفاده کنید.

اگر می‌خواهید از فیلد بولی copyRequiresWriterPermission استفاده کنید، عملکرد آن برای خواندن از فیلد و نوشتن در آن متفاوت است.

مقدار بازیابی‌شده‌ی فیلد copyRequiresWriterPermission نشان می‌دهد که آیا کاربرانی که دارای مجوز role=commenter یا role=reader هستند می‌توانند فایل‌ها را در Drive دانلود، چاپ یا کپی کنند. مقدار این فیلد ترکیبی از تنظیمات فایل، تنظیمات درایو مشترک یا قوانین DLP را نشان می‌دهد. با این حال، ارزیابی زمینه برای قوانین DLP لحاظ نشده است.

تنظیم فیلد copyRequiresWriterPermission روی false هر دو فیلد restrictedForWriters و restrictedForReaders را روی false به‌روزرسانی می‌کند. این یعنی تنظیمات محدودیت دانلود یا کپی برای همه کاربران حذف می‌شود.

فیلدهایی که ویژگی‌های دانلود، چاپ و کپی را کنترل می‌کنند

جدول زیر فیلدهای منبع files را که بر عملکرد دانلود، چاپ و کپی تأثیر می‌گذارند، فهرست می‌کند:

میدان توضیحات نسخه
capabilities.canCopy اینکه آیا کاربر فعلی می‌تواند فایلی را کپی کند یا خیر. نسخه ۲ و نسخه ۳
capabilities.canDownload اینکه آیا کاربر فعلی می‌تواند فایلی را دانلود کند یا خیر. نسخه ۲ و نسخه ۳
capabilities.canChangeCopyRequiresWriterPermission اینکه آیا کاربر فعلی می‌تواند محدودیت copyRequiresWriterPermission یک فایل را تغییر دهد یا خیر. نسخه ۲ و نسخه ۳
capabilities.canChangeItemDownloadRestriction اینکه آیا کاربر فعلی می‌تواند محدودیت دانلود یک فایل را تغییر دهد یا خیر. فقط نسخه ۳
copyRequiresWriterPermission اینکه آیا گزینه‌های کپی، چاپ یا دانلود این فایل باید برای خوانندگان و نظردهندگان غیرفعال باشد یا خیر. نسخه ۲ و نسخه ۳
downloadRestrictions محدودیت‌های دانلود اعمال‌شده روی یک فایل. فقط نسخه ۳