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

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

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

آلية عمل الأذونات

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

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

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

في المقابل، يمكن إلغاء الأذونات المكتسَبة في ملف أو مجلد في "ملفاتي" على Drive. وبالتالي، إذا اكتسب ملف الإذن role=writer من مجلد "ملفاتي في Drive"، يمكنك ضبط 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,
    "canChangeSecurityUpdateEnabled": false,
    "canComment": true,
    "canCopy": true,
    "canDelete": true,
    "canDownload": true,
    "canEdit": true,
    "canListChildren": false,
    "canModifyContent": true,
    "canModifyContentRestriction": true,
    "canModifyLabels": true,
    "canMoveChildrenWithinDrive": false,
    "canMoveItemOutOfDrive": true,
    "canMoveItemWithinDrive": true,
    "canReadLabels": true,
    "canReadRevisions": true,
    "canRemoveChildren": false,
    "canRemoveMyDriveParent": true,
    "canRename": true,
    "canShare": true,
    "canTrash": true,
    "canUntrash": true
  }
}

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

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

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

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

    • إذا تم ضبط القيمة المنطقية writersCanShare على false للملف، يجب أن يمتلك المستخدم القيمة role=owner الأكثر تساهلاً.

    • لا يُسمح بالوصول المؤقت (الذي يخضع لتاريخ ووقت انتهاء صلاحية) إلى مجلدات "ملفاتي" باستخدام role=writer. لمزيد من المعلومات، اطّلِع على تحديد تاريخ انتهاء صلاحية للحد من الوصول إلى الملفات.

  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 كجزء من عضويته في مساحة تخزين سحابي مشتركة. ومع ذلك، يمكن لتطبيقك منح "أليكس" 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
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 date-time. تنطبق القيود التالية على مُدد انتهاء الصلاحية:

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

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