שיתוף קבצים, תיקיות ואחסון

לכל קובץ, תיקייה ואחסון שיתופי ב-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,
    "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 Admin, נכנסים לתפריט > ספרייה > קהלים יעד.

    כניסה לדף 'משתמשי יעד'

    כדי לבצע את המשימה הזו, עליכם להיות מחוברים באמצעות חשבון עם הרשאות סופר-אדמין.

  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, משתמשים ב-method‏ 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, משתמשים ב-method‏ 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;
        }
    }
}

מחיקת הרשאה

כדי לבטל את הגישה לקובץ או לתיקייה, צריך להפעיל את ה-method‏ delete() במשאב permissions עם הפרמטרים fileId ו-permissionId של הנתיב שמוגדרים למחיקה של ההרשאה.

בפריטים בתיקייה 'האחסון שלי', אפשר למחוק הרשאה שעברה בירושה. מחיקת הרשאה שעברה בירושה מבטלת את הגישה לפריט ולפריטי הצאצאים, אם יש כאלה.

לא ניתן לבטל הרשאות שעברו בירושה לפריטים באחסון שיתופי. במקום זאת, מעדכנים או מוחקים את ההרשאה בקובץ או בתיקייה ברמה העליונה.

אפשר להשתמש בשיטה delete() גם כדי למחוק הרשאות שחלות ישירות על קובץ או תיקייה באחסון השיתופי.

הצג דוגמה

דוגמת הקוד הבאה מראה איך לבטל גישה על ידי מחיקת permissionId. אם הפעולה בוצעה ללא שגיאות, גוף התגובה יהיה ריק. כדי לוודא שההרשאה הוסרה, משתמשים בשיטה list() במשאב permissions עם פרמטר הנתיב fileId.

בקשה

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

הגדרת תאריך תפוגה כדי להגביל את הגישה לקובץ

אם אתם עובדים עם אנשים על פרויקט רגיש, יכול להיות שתרצו להגביל את הגישה שלהם לקבצים מסוימים ב-Drive אחרי פרק זמן מסוים. בקבצים בתיקייה 'האחסון שלי', אפשר להגדיר תאריך תפוגה כדי להגביל או להסיר את הגישה לקובץ.

כדי להגדיר את תאריך התפוגה:

השדה expirationTime מציין מתי יפוג התוקף של ההרשאה, לפי RFC 3339 תאריך-שעה. יש הגבלות על מועדי התפוגה:

  • אפשר להגדיר אותם רק בהרשאות של משתמשים וקבוצות.
  • השעה חייבת להיות בעתיד.
  • המועד לא יכול להיות יותר משנה בעתיד.

מידע נוסף על תאריך התפוגה זמין במאמרים הבאים: