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

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

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

برای جلوگیری از انجام کارهای زیر می توانید یک محدودیت محتوا به فایل Google Drive اضافه کنید:

  • اصلاح عنوان
  • انجام ویرایش محتوا
  • در حال آپلود یک ویرایش
  • افزودن یا اصلاح نظرات

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

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

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

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

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

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

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

فایل های دارای محدودیت محتوا را مدیریت کنید

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

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

  • نظرات و پیشنهادات (در مورد اسناد، برگه‌ها، اسلایدها و فایل‌های باینری)
  • بازبینی یک فایل باینری
  • متن و قالب‌بندی در Docs
  • متن یا فرمول‌ها در 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();

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) ظاهر می‌شود. فایل اکنون فقط خواندنی است.

فایلی با محدودیت محتوا در فهرست فایل Drive.
شکل 1. یک فایل با محدودیت محتوا در لیست فایل 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();

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 برای حذف محدودیت محتوا و اجازه ویرایش محتوا (به شرط داشتن مجوزهای صحیح) استفاده کنید. دو گزینه برای انجام این کار وجود دارد:

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

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

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

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

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

جاوا

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

پایتون

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

پایتون

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، Docs، Sheets و Slides توسط کاربرانی که دارای مجوز role=commenter یا role=reader هستند، محدود کنید.

برای حذف گزینه‌های دانلود، چاپ و کپی فایل‌ها، از روش files.update با فیلد بولی copyRequiresWriterPermission روی true استفاده کنید.