مشاركة الملفات والمجلدات ومساحات التخزين

يتضمّن كل ملف ومجلد ومساحة تخزين سحابي مشتركة في Google Drive مراجع مرتبطة permissions. يحدّد كل مرجع إذنًا خاصًا type (user وgroup وdomain وanyone) وrole (owner وorganizer وfileOrganizer وwriter وcommenter وreader). على سبيل المثال، قد يتضمّن ملف إذنًا يمنح مستخدمًا معيّنًا (type=user) إذن الوصول للقراءة فقط (role=reader)، بينما يمنح إذن آخر أعضاء مجموعة معيّنة (type=group) إمكانية إضافة تعليقات إلى ملف (role=commenter).

للحصول على قائمة كاملة بالأدوار والعمليات المسموح بها لكل دور، يُرجى الرجوع إلى الأدوار والأذونات.

طريقة عمل الأذونات

تنتقل قوائم الأذونات الخاصة بمجلد إلى المجلدات الفرعية. ترث جميع الملفات والمجلدات الفرعية الأذونات من المجلد الرئيسي. عندما يتم تغيير الأذونات أو التسلسل الهرمي، يتم نشر التغيير بشكل متكرر في جميع المجلدات المتداخلة. على سبيل المثال، إذا كان ملف متوفّرًا في مجلد وتم نقل هذا المجلد إلى مجلد آخر، سيتم تطبيق الأذونات الممنوحة للمجلد الجديد على الملف. إذا منح المجلد الجديد مستخدم الملف دورًا جديدًا، مثل "محرِّر"، سيحلّ هذا الدور محل الدور القديم.

في المقابل، إذا كان الملف يرث role=writer من مجلد، وتم نقله إلى مجلد آخر يوفّر دور "قارئ"، سيرث الملف الآن role=reader.

لا يمكن إزالة الأذونات المكتسبة من ملف أو مجلد في مساحة تخزين سحابي مشتركة. بدلاً من ذلك، يجب تعديل هذه الأذونات على المجلد الرئيسي المباشر أو غير المباشر الذي تم اكتسابها منه. يمكن إزالة الأذونات المكتسَبة من الملفات ضمن "ملفاتي" أو "تمت مشاركتها معي".

في المقابل، يمكن تجاهل الأذونات المكتسبة في ملف أو مجلد في "ملفاتي". لذلك، إذا كان الملف يكتسب role=writer من مجلد في "ملفاتي"، يمكنك ضبط role=reader على الملف لتقليل مستوى أذوناته.

فهم إمكانات الملفات

لا يحدّد المرجع permissions في النهاية ما إذا كان بإمكان المستخدم الحالي تنفيذ إجراءات على ملف أو مجلد. بدلاً من ذلك، يحتوي المرجع files على مجموعة من حقول capabilities المنطقية المستخدَمة للإشارة إلى ما إذا كان يمكن تنفيذ إجراء على ملف أو مجلد. تضبط Google Drive API هذه الحقول استنادًا إلى مورد الأذونات الخاص بالمستخدم الحالي والمرتبط بالملف أو المجلد.

على سبيل المثال، عندما يسجّل "أحمد" الدخول إلى تطبيقك ويحاول مشاركة ملف، يتم التحقّق من دور "أحمد" للتأكّد من توفّر الأذونات اللازمة للوصول إلى الملف. إذا كان الدور يسمح للمستخدم بمشاركة ملف، سيتم ملء capabilities المرتبط بالملف، مثل canShare، وفقًا للدور. إذا أراد "أحمد" مشاركة الملف، يتحقّق تطبيقك من capabilities للتأكّد من أنّ canShare مضبوط على true.

للاطّلاع على مثال على استرداد الملف capabilities، يُرجى الاطّلاع على الحصول على إمكانات الملف.

الحصول على إمكانات الملف

عندما يفتح تطبيقك ملفًا، يجب أن يتحقّق من إمكانات الملف ويعرض واجهة المستخدم بما يتوافق مع أذونات المستخدم الحالي. على سبيل المثال، إذا لم يكن لدى المستخدم إذن canComment في الملف، يجب إيقاف إمكانية التعليق في واجهة المستخدم.

للتحقّق من الإمكانات، استدعِ طريقة get() في المورد files مع مَعلمة المسار fileId والمَعلمة fields التي تم ضبطها على الحقل capabilities. لمزيد من المعلومات حول عرض الحقول باستخدام المَعلمة fields، راجِع عرض حقول محدّدة.

يوضّح نموذج الرمز البرمجي التالي كيفية التحقّق من أذونات المستخدم. يعرض الرد قائمة بالإمكانات التي يتمتّع بها المستخدم في الملف. تتوافق كل إمكانية مع إجراء دقيق يمكن للمستخدم اتخاذه. لا تتم تعبئة بعض الحقول إلا للعناصر في مساحات التخزين السحابي المشتركة.

الطلب

GET https://www.googleapis.com/drive/v3/files/FILE_ID?fields=capabilities

الرد

{
  "capabilities": {
    "canAcceptOwnership": false,
    "canAddChildren": false,
    "canAddMyDriveParent": false,
    "canChangeCopyRequiresWriterPermission": true,
    "canChangeItemDownloadRestriction": true,
    "canChangeSecurityUpdateEnabled": false,
    "canChangeViewersCanCopyContent": true,
    "canComment": true,
    "canCopy": true,
    "canDelete": true,
    "canDisableInheritedPermissions": false,
    "canDownload": true,
    "canEdit": true,
    "canEnableInheritedPermissions": true,
    "canListChildren": false,
    "canModifyContent": true,
    "canModifyContentRestriction": true,
    "canModifyEditorContentRestriction": true,
    "canModifyOwnerContentRestriction": true,
    "canModifyLabels": true,
    "canMoveChildrenWithinDrive": false,
    "canMoveItemIntoTeamDrive": true,
    "canMoveItemOutOfDrive": true,
    "canMoveItemWithinDrive": true,
    "canReadLabels": true,
    "canReadRevisions": true,
    "canRemoveChildren": false,
    "canRemoveContentRestriction": false,
    "canRemoveMyDriveParent": true,
    "canRename": true,
    "canShare": true,
    "canTrash": true,
    "canUntrash": true
  }
}

سيناريوهات لمشاركة مراجع Drive

هناك خمسة أنواع مختلفة من سيناريوهات المشاركة:

  1. لمشاركة ملف في "ملفاتي"، يجب أن يكون لدى المستخدم إذن role=writer أو role=owner.

  2. لمشاركة مجلد في "ملفاتي"، يجب أن يكون لدى المستخدم إذن role=writer أو role=owner.

  3. لمشاركة ملف في مساحة تخزين سحابي مشتركة، يجب أن يكون لدى المستخدم إذن role=writer أو role=fileOrganizer أو role=organizer.

    • لا ينطبق الإعداد writersCanShare على العناصر في مساحات التخزين السحابي المشتركة. ويتم التعامل معه كما لو كان مضبوطًا دائمًا على true.
  4. لمشاركة مجلد في مساحة تخزين سحابي مشتركة، يجب أن يكون لدى المستخدم role=organizer.

    • إذا تم ضبط القيود على sharingFoldersRequiresOrganizerPermission في مساحة تخزين سحابي مشتركة على false، يمكن للمستخدمين الذين لديهم إذن role=fileOrganizer مشاركة المجلدات في مساحة التخزين السحابي المشتركة هذه.
  5. لإدارة عضوية مساحة التخزين السحابي المشتركة، يجب أن يكون لدى المستخدم role=organizer. يمكن للمستخدمين والمجموعات فقط أن يكونوا أعضاء في مساحات التخزين السحابي المشتركة.

إنشاء إذن

يجب ملء الحقلَين التاليَين عند إنشاء إذن:

  • type: يحدّد type نطاق الأذونات (user أو group أو domain أو anyone). ينطبق الإذن الذي يتضمّن type=user على مستخدم معيّن، بينما ينطبق الإذن الذي يتضمّن type=domain على جميع المستخدمين في نطاق معيّن.

  • role: يحدّد الحقل role العمليات التي يمكن أن ينفّذها type. على سبيل المثال، يمنح الإذن الذي يتضمّن type=user وrole=reader مستخدمًا معيّنًا إذن الوصول للقراءة فقط إلى الملف أو المجلد. أو يتيح إذن يتضمّن type=domain وrole=commenter لجميع المستخدمين في النطاق إضافة تعليقات إلى ملف. للحصول على قائمة كاملة بالأدوار والعمليات المسموح بها لكل دور، يُرجى الرجوع إلى الأدوار والأذونات.

عند إنشاء إذن يتضمّن type=user أو type=group، يجب أيضًا تقديم emailAddress لربط المستخدم أو المجموعة المحدّدة بالإذن.

عند إنشاء إذن يتضمّن type=domain، عليك أيضًا تقديم domain لربط نطاق محدّد بالإذن.

لإنشاء إذن، اتّبِع الخطوات التالية:

  1. استخدِم طريقة create() مع مَعلمة المسار fileId للملف أو المجلد المرتبطَين.
  2. في نص الطلب، حدِّد type وrole.
  3. إذا كان type=user أو type=group، قدِّم emailAddress. إذا كانت type=domain، يُرجى تقديم domain.

يوضّح نموذج الرمز البرمجي التالي كيفية إنشاء إذن. تعرض الاستجابة مثيلاً لمورد Permission، بما في ذلك permissionId المعيّن.

الطلب

POST https://www.googleapis.com/drive/v3/files/FILE_ID/permissions
{
  "requests": [
    {
        "type": "user",
        "role": "commenter",
        "emailAddress": "alex@altostrat.com"
    }
  ]
}

الرد

{
    "kind": "drive#permission",
    "id": "PERMISSION_ID",
    "type": "user",
    "role": "commenter"
}

استخدام شرائح الجمهور المستهدَفة

الجماهير المستهدفة هي مجموعات من الأشخاص، مثل الأقسام أو الفِرق، يمكنك اقتراحها للمستخدمين لمشاركة العناصر معها. يمكنك تشجيع المستخدمين على مشاركة العناصر مع جمهور مُعيَّن أو محدود بدلاً من المؤسسة بأكملها. يمكن أن تساعدك الجماهير المستهدفة في تحسين أمان بياناتك وخصوصيتها، وتسهيل مشاركة المستخدمين بشكل مناسب. لمزيد من المعلومات، يمكنك الاطّلاع على المقالة لمحة عن شرائح الجمهور المستهدَفة.

لاستخدام الجماهير المستهدفة، اتّبِع الخطوات التالية:

  1. في "وحدة تحكّم المشرف في Google"، انتقِل إلى "القائمة" > الدليل > الجماهير المستهدفة.

    الانتقال إلى "الجماهير المستهدفة"

    يجب تسجيل الدخول باستخدام حساب يمتلك امتيازات المشرف المتميّز لإجراء هذه المهمة.

  2. في قائمة الجماهير المستهدفة، انقر على اسم الجمهور المستهدف. لإنشاء جمهور مستهدف، راجِع مقالة إنشاء جمهور مستهدف.

  3. انسخ المعرّف الفريد من عنوان URL الخاص بالجمهور المستهدَف: https://admin.google.com/ac/targetaudiences/ID.

  4. أنشئ إذنًا باستخدام type=domain، واضبط حقل domain على ID.audience.googledomains.com.

لمعرفة كيفية تفاعل المستخدمين مع شرائح الجمهور المستهدَفة، اطّلِع على تجربة المستخدم للمشاركة باستخدام رابط.

سرد جميع الأذونات

استخدِم طريقة list() في المورد permissions لاسترداد جميع الأذونات الخاصة بملف أو مجلد أو مساحة تخزين سحابي مشتركة.

يوضّح نموذج الرمز البرمجي التالي كيفية الحصول على جميع الأذونات. يعرض الردّ قائمة بالأذونات.

الطلب

GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions

الرد

{
  "kind": "drive#permissionList",
  "permissions": [
    {
      "id": "PERMISSION_ID",
      "type": "user",
      "kind": "drive#permission",
      "role": "commenter"
    }
  ]
}

تحديث الأذونات

لتعديل الأذونات في ملف أو مجلد، يمكنك تغيير الدور المحدّد. لمزيد من المعلومات حول العثور على مصدر الدور، راجِع مقالة تحديد مصدر الدور.

  1. استدعِ طريقة update() في المورد permissions مع ضبط مَعلمة المسار permissionId على الإذن المطلوب تغييره، وضبط مَعلمة المسار fileId على الملف أو المجلد أو مساحة التخزين السحابي المشتركة المرتبطة. للعثور على permissionId، استخدِم طريقة list() في مورد permissions مع مَعلمة المسار fileId.

  2. في الطلب، حدِّد role الجديد.

يمكنك منح أذونات لملفات أو مجلدات فردية في مساحة تخزين سحابي مشتركة حتى إذا كان المستخدم أو المجموعة عضوًا فيها. على سبيل المثال، يملك "أحمد" role=commenter كجزء من عضويته في مساحة تخزين سحابي مشتركة. ومع ذلك، يمكن لتطبيقك منح Alex role=writer لملف في مساحة تخزين سحابي مشتركة. في هذه الحالة، بما أنّ الدور الجديد يمنح أذونات أكثر من الدور الممنوح من خلال الاشتراك، يصبح الإذن الجديد هو الدور الفعّال للملف أو المجلد.

يوضّح نموذج الرمز البرمجي التالي كيفية تغيير الأذونات على ملف أو مجلد من "معلِّق" إلى "محرِّر". تعرض الاستجابة مثيلاً لمورد permissions.

الطلب

PATCH https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID
{
  "requests": [
    {
        "role": "writer"
    }
  ]
}

الرد

{
  "kind": "drive#permission",
  "id": "PERMISSION_ID",
  "type": "user",
  "role": "writer"
}

تحديد مصدر الدور

لتغيير الدور في ملف أو مجلد، يجب معرفة مصدر الدور. بالنسبة إلى مساحات التخزين السحابي المشتركة، يمكن أن يستند مصدر الدور إلى العضوية في مساحة التخزين السحابي المشتركة أو الدور في مجلد أو الدور في ملف.

لتحديد مصدر الدور لمساحة تخزين سحابي مشتركة أو العناصر داخلها، استخدِم طريقة get() في المورد permissions مع مَعلمتَي المسار fileId وpermissionId، واضبط المَعلمة fields على الحقل permissionDetails.

للعثور على permissionId، استخدِم طريقة list() في مورد permissions مع مَعلمة المسار fileId. لاسترداد حقل permissionDetails في طلب list، اضبط المَعلمة fields على permissions/permissionDetails.

يسرد هذا الحقل جميع أذونات الملفات المكتسَبة والمباشرة للمستخدم أو المجموعة أو النطاق.

يوضّح نموذج الرمز البرمجي التالي كيفية تحديد مصدر الدور. يعرض الردّ permissionDetails لمورد permissions. يوفّر الحقل inheritedFrom معرّف العنصر الذي يتم اكتساب الإذن منه.

الطلب

GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID?fields=permissionDetails&supportsAllDrives=true

الرد

{
  "permissionDetails": [
    {
      "permissionType": "member",
      "role": "commenter",
      "inheritedFrom": "INHERITED_FROM_ID",
      "inherited": true
    },
    {
      "permissionType": "file",
      "role": "writer",
      "inherited": false
    }
  ]
}

تعديل أذونات متعددة باستخدام طلبات مجمّعة

ننصحك بشدة باستخدام طلبات مجمّعة لتعديل أذونات متعددة.

في ما يلي مثال على إجراء تعديل مجمّع للأذونات باستخدام مكتبة برامج.

Java

drive/snippets/drive_v3/src/main/java/ShareFile.java
import com.google.api.client.googleapis.batch.BatchRequest;
import com.google.api.client.googleapis.batch.json.JsonBatchCallback;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpHeaders;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.Permission;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* Class to demonstrate use-case of modify permissions. */
public class ShareFile {

  /**
   * Batch permission modification.
   * realFileId file Id.
   * realUser User Id.
   * realDomain Domain of the user ID.
   *
   * @return list of modified permissions if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static List<String> shareFile(String realFileId, String realUser, String realDomain)
      throws IOException {
        /* Load pre-authorized user credentials from the environment.
         TODO(developer) - See https://developers.google.com/identity for
         guides on implementing OAuth2 for your application.application*/
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    final List<String> ids = new ArrayList<String>();


    JsonBatchCallback<Permission> callback = new JsonBatchCallback<Permission>() {
      @Override
      public void onFailure(GoogleJsonError e,
                            HttpHeaders responseHeaders)
          throws IOException {
        // Handle error
        System.err.println(e.getMessage());
      }

      @Override
      public void onSuccess(Permission permission,
                            HttpHeaders responseHeaders)
          throws IOException {
        System.out.println("Permission ID: " + permission.getId());

        ids.add(permission.getId());

      }
    };
    BatchRequest batch = service.batch();
    Permission userPermission = new Permission()
        .setType("user")
        .setRole("writer");

    userPermission.setEmailAddress(realUser);
    try {
      service.permissions().create(realFileId, userPermission)
          .setFields("id")
          .queue(batch, callback);

      Permission domainPermission = new Permission()
          .setType("domain")
          .setRole("reader");

      domainPermission.setDomain(realDomain);

      service.permissions().create(realFileId, domainPermission)
          .setFields("id")
          .queue(batch, callback);

      batch.execute();

      return ids;
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to modify permission: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/share_file.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def share_file(real_file_id, real_user, real_domain):
  """Batch permission modification.
  Args:
      real_file_id: file Id
      real_user: User ID
      real_domain: Domain of the user ID
  Prints modified permissions

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)
    ids = []
    file_id = real_file_id

    def callback(request_id, response, exception):
      if exception:
        # Handle error
        print(exception)
      else:
        print(f"Request_Id: {request_id}")
        print(f'Permission Id: {response.get("id")}')
        ids.append(response.get("id"))

    # pylint: disable=maybe-no-member
    batch = service.new_batch_http_request(callback=callback)
    user_permission = {
        "type": "user",
        "role": "writer",
        "emailAddress": "user@example.com",
    }
    batch.add(
        service.permissions().create(
            fileId=file_id,
            body=user_permission,
            fields="id",
        )
    )
    domain_permission = {
        "type": "domain",
        "role": "reader",
        "domain": "example.com",
    }
    domain_permission["domain"] = real_domain
    batch.add(
        service.permissions().create(
            fileId=file_id,
            body=domain_permission,
            fields="id",
        )
    )
    batch.execute()

  except HttpError as error:
    print(f"An error occurred: {error}")
    ids = None

  return ids


if __name__ == "__main__":
  share_file(
      real_file_id="1dUiRSoAQKkM3a4nTPeNQWgiuau1KdQ_l",
      real_user="gduser1@workspacesamples.dev",
      real_domain="workspacesamples.dev",
  )

Node.js

drive/snippets/drive_v3/file_snippets/share_file.js
/**
 * Batch permission modification
 * @param{string} fileId file ID
 * @param{string} targetUserEmail username
 * @param{string} targetDomainName domain
 * @return{list} permission id
 * */
async function shareFile(fileId, targetUserEmail, targetDomainName) {
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const permissionIds = [];

  const permissions = [
    {
      type: 'user',
      role: 'writer',
      emailAddress: targetUserEmail, // 'user@partner.com',
    },
    {
      type: 'domain',
      role: 'writer',
      domain: targetDomainName, // 'example.com',
    },
  ];
  // Note: Client library does not currently support HTTP batch
  // requests. When possible, use batched requests when inserting
  // multiple permissions on the same item. For this sample,
  // permissions are inserted serially.
  for (const permission of permissions) {
    try {
      const result = await service.permissions.create({
        resource: permission,
        fileId: fileId,
        fields: 'id',
      });
      permissionIds.push(result.data.id);
      console.log(`Inserted permission id: ${result.data.id}`);
    } catch (err) {
      // TODO(developer): Handle failed permissions
      console.error(err);
    }
  }
  return permissionIds;
}

PHP

drive/snippets/drive_v3/src/DriveShareFile.php
<?php
use Google\Client;
use Google\Service\Drive;
function shareFile()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $realFileId = readline("Enter File Id: ");
        $realUser = readline("Enter user email address: ");
        $realDomain = readline("Enter domain name: ");
        $ids = array();
            $fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
            $fileId = $realFileId;
            $driveService->getClient()->setUseBatch(true);
            try {
                $batch = $driveService->createBatch();

                $userPermission = new Drive\Permission(array(
                    'type' => 'user',
                    'role' => 'writer',
                    'emailAddress' => 'user@example.com'
                ));
                $userPermission['emailAddress'] = $realUser;
                $request = $driveService->permissions->create(
                    $fileId, $userPermission, array('fields' => 'id'));
                $batch->add($request, 'user');
                $domainPermission = new Drive\Permission(array(
                    'type' => 'domain',
                    'role' => 'reader',
                    'domain' => 'example.com'
                ));
                $userPermission['domain'] = $realDomain;
                $request = $driveService->permissions->create(
                    $fileId, $domainPermission, array('fields' => 'id'));
                $batch->add($request, 'domain');
                $results = $batch->execute();

                foreach ($results as $result) {
                    if ($result instanceof Google_Service_Exception) {
                        // Handle error
                        printf($result);
                    } else {
                        printf("Permission ID: %s\n", $result->id);
                        array_push($ids, $result->id);
                    }
                }
            } finally {
                $driveService->getClient()->setUseBatch(false);
            }
            return $ids;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    }

}

NET.

drive/snippets/drive_v3/DriveV3Snippets/ShareFile.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Requests;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use-case of Drive modify permissions.
    public class ShareFile
    {
        /// <summary>
        /// Batch permission modification.
        /// </summary>
        /// <param name="realFileId">File id.</param>
        /// <param name="realUser">User id.</param>
        /// <param name="realDomain">Domain id.</param>
        /// <returns>list of modified permissions, null otherwise.</returns>
        public static IList<String> DriveShareFile(string realFileId, string realUser, string realDomain)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                var ids = new List<String>();
                var batch = new BatchRequest(service);
                BatchRequest.OnResponse<Permission> callback = delegate(
                    Permission permission,
                    RequestError error,
                    int index,
                    HttpResponseMessage message)
                {
                    if (error != null)
                    {
                        // Handle error
                        Console.WriteLine(error.Message);
                    }
                    else
                    {
                        Console.WriteLine("Permission ID: " + permission.Id);
                    }
                };
                Permission userPermission = new Permission()
                {
                    Type = "user",
                    Role = "writer",
                    EmailAddress = realUser
                };

                var request = service.Permissions.Create(userPermission, realFileId);
                request.Fields = "id";
                batch.Queue(request, callback);

                Permission domainPermission = new Permission()
                {
                    Type = "domain",
                    Role = "reader",
                    Domain = realDomain
                };
                request = service.Permissions.Create(domainPermission, realFileId);
                request.Fields = "id";
                batch.Queue(request, callback);
                var task = batch.ExecuteAsync();
                task.Wait();
                return ids;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

حذف إذن

لإبطال إذن الوصول إلى ملف أو مجلد، استخدِم طريقة delete() في المورد permissions مع ضبط مَعلمتَي المسار fileId وpermissionId على الحذف.

بالنسبة إلى الملفات في "ملفاتي"، يمكن حذف إذن موروث. يؤدي حذف إذن وصول مُكتسَب إلى إلغاء إذن الوصول إلى الملف والعناصر الفرعية، إن وُجدت.

بالنسبة إلى العناصر في مساحة تخزين سحابي مشتركة، لا يمكن إبطال الأذونات المكتسبة. يمكنك تعديل الإذن أو حذفه في الملف أو المجلد الرئيسي بدلاً من ذلك.

يُستخدَم أيضًا الأسلوب delete() لحذف الأذونات المطبَّقة مباشرةً على ملف أو مجلد في مساحة تخزين سحابي مشتركة.

يوضّح نموذج الرمز البرمجي التالي كيفية إبطال إذن الوصول عن طريق حذف permissionId. إذا كانت الاستجابة ناجحة، سيكون نص الاستجابة فارغًا. للتأكّد من إزالة الإذن، استخدِم طريقة list() في مورد permissions مع مَعلمة المسار fileId.

الطلب

DELETE https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID

تحديد تاريخ انتهاء صلاحية للحدّ من إمكانية الوصول إلى الملفات

عند العمل مع مستخدمين على مشروع حسّاس، قد تريد تقييد وصولهم إلى ملفات معيّنة في Drive بعد فترة زمنية معيّنة. بالنسبة إلى الملفات في "ملفاتي"، يمكنك تحديد تاريخ انتهاء صلاحية للحد من الوصول إلى هذا الملف أو إزالته.

لتحديد تاريخ انتهاء الصلاحية، اتّبِع الخطوات التالية:

  • استخدِم طريقة create() في المورد permissions واضبط الحقل expirationTime (بالإضافة إلى الحقول المطلوبة الأخرى). لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء إذن.

  • استخدِم طريقة update() في المرجع permissions واضبط الحقل expirationTime (بالإضافة إلى الحقول المطلوبة الأخرى). لمزيد من المعلومات، يُرجى الاطّلاع على تعديل الأذونات.

يشير الحقل expirationTime إلى وقت انتهاء صلاحية الإذن باستخدام تنسيق التاريخ والوقت RFC 3339. تنطبق القيود التالية على أوقات انتهاء الصلاحية:

  • لا يمكن ضبطها إلا على أذونات المستخدمين والمجموعات.
  • يجب أن يكون الوقت في المستقبل.
  • لا يمكن أن يكون الوقت بعد أكثر من عام واحد في المستقبل.

لمزيد من المعلومات عن تاريخ انتهاء الصلاحية، اطّلِع على المقالات التالية: