Dosya, klasör ve sürücü paylaşma

Her Google Drive dosyası, klasörü ve ortak Drive'ı ile ilişkili permissions kaynaklar vardır. Her kaynak, belirli bir type (user, group, domain, anyone) ve role (owner, organizer, fileOrganizer, writer, commenter, reader) için izni tanımlar. Örneğin, bir dosya, belirli bir kullanıcıya (type=user) salt okunur erişim (role=reader) izni verebilirken başka bir izin, belirli bir grubun (type=group) üyelerine dosyaya yorum ekleme (role=commenter) izni verebilir.

Rollerin ve her birinin izin verdiği işlemlerin tam listesi için Roller ve izinler başlıklı makaleye bakın.

İzinlerin işleyiş şekli

Bir klasörün izin listeleri aşağıya doğru yayılır. Tüm alt dosyalar ve klasörler, üst klasörden izinleri devralır. İzinler veya hiyerarşi her değiştirildiğinde, tüm iç içe yerleştirilmiş klasörlerde yinelemeli olarak yayılır. Örneğin, bir klasörde bulunan dosya, başka bir klasörün içine taşınırsa yeni klasördeki izinler dosyaya uygulanır. Yeni klasör, dosya kullanıcısına "yazar" gibi yeni bir rol verirse eski rolü geçersiz kılınır.

Buna karşılık, bir dosya klasörden role=writer iznini devralırsa ve "okuyucu" rolü sağlayan başka bir klasöre taşınırsa dosya artık role=reader iznini devralır.

Devralınan izinler, ortak Drive'daki bir dosya veya klasörden kaldırılamaz. Bunun yerine bu izinler, devralındıkları doğrudan veya dolaylı üst öğede ayarlanmalıdır. Devralınan izinler, "Drive'ım" veya "Benimle paylaşılanlar" bölümündeki öğelerden kaldırılabilir.

Aksine, devralınan izinler Benim Drive'ımdaki bir dosya veya klasörde geçersiz kılınabilir. Bu nedenle, bir dosya Birimim klasöründen role=writer devralırsa dosyanın izin düzeyini düşürmek için dosyada role=reader ayarlayabilirsiniz.

Dosya özelliklerini anlama

permissions kaynağı, geçerli kullanıcının bir dosya veya klasörde işlem yapma yeteneğini nihai olarak belirlemez. Bunun yerine, files kaynağı, bir dosya veya klasörde işlem yapılıp yapılamayacağını belirtmek için kullanılan bir boole capabilities alanları koleksiyonu içerir. Google Drive API, bu alanları dosya veya klasörle ilişkili mevcut kullanıcının izin kaynağına göre ayarlar.

Örneğin, Ali uygulamanıza giriş yapıp bir dosyayı paylaşmaya çalıştığında, Ali'nin rolü dosyadaki izinler açısından kontrol edilir. Rol, kullanıcının dosya paylaşmasına izin veriyorsa dosya ile ilgili capabilities (ör. canShare) rolüne göre doldurulur. Ali dosyayı paylaşmak isterse uygulamanız, canShare değerinin true olarak ayarlandığından emin olmak için capabilities değerini kontrol eder.

capabilities dosyasını alma örneği için Get file capabilities başlıklı makaleyi inceleyin.

Dosya özelliklerini kullanma

Uygulamanız bir dosyayı açtığında dosyanın özelliklerini kontrol etmeli ve kullanıcı arayüzünü, mevcut kullanıcının izinlerini yansıtacak şekilde oluşturmalıdır. Örneğin, kullanıcının dosyada canComment özelliği yoksa kullanıcı arayüzünde yorum yapma özelliği devre dışı bırakılmalıdır.

Özellikleri kontrol etmek için get() yöntemini files kaynağında fileId yol parametresi ve fields parametresi capabilities alanına ayarlanmış şekilde çağırın. fields parametresini kullanarak alan döndürme hakkında daha fazla bilgi için Belirli alanları döndürme başlıklı makaleyi inceleyin.

Aşağıdaki kod örneğinde, kullanıcı izinlerinin nasıl doğrulanacağı gösterilmektedir. Yanıt, kullanıcının dosya üzerinde sahip olduğu özelliklerin listesini döndürür. Her özellik, kullanıcının gerçekleştirebileceği ayrıntılı bir işleme karşılık gelir. Bazı alanlar yalnızca ortak Drive'lardaki öğeler için doldurulur.

İstek

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

Yanıt

{
  "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 kaynaklarını paylaşma senaryoları

Beş farklı paylaşım senaryosu vardır:

  1. Drive'ım'daki bir dosyayı paylaşmak için kullanıcının role=writer veya role=owner erişimine sahip olması gerekir.

  2. Drive'ım klasöründeki bir klasörü paylaşmak için kullanıcının role=writer veya role=owner olması gerekir.

    • Dosya için writersCanShare boole değeri false olarak ayarlanmışsa kullanıcının daha kapsamlı role=owner iznine sahip olması gerekir.

    • role=writer ile Drive'ım klasörlerinde geçici erişime (geçerlilik bitiş tarihi ve saatiyle yönetilir) izin verilmez. Daha fazla bilgi için Dosya erişimini sınırlamak üzere son kullanma tarihi belirleme başlıklı makaleyi inceleyin.

  3. Ortak Drive'daki bir dosyayı paylaşmak için kullanıcının role=writer, role=fileOrganizer veya role=organizer iznine sahip olması gerekir.

    • writersCanShare ayarı, ortak drive'lardaki öğeler için geçerli değildir. Bu seçenek her zaman true olarak ayarlanmış gibi değerlendirilir.
  4. Kullanıcının, ortak Drive'daki bir klasörü paylaşmak için role=organizer olması gerekir.

    • Bir ortak drive'daki sharingFoldersRequiresOrganizerPermission kısıtlaması false olarak ayarlanırsa role=fileOrganizer iznine sahip kullanıcılar bu ortak drive'daki klasörleri paylaşabilir.
  5. Kullanıcının ortak Drive üyeliğini yönetebilmesi için role=organizer olması gerekir. Ortak drive'ların üyeleri yalnızca kullanıcılar ve gruplar olabilir.

İzin oluşturma

İzin oluştururken aşağıdaki iki alan gereklidir:

  • type: type, izin kapsamını (user, group, domain veya anyone) tanımlar. type=user ile verilen izinler belirli bir kullanıcı için geçerliyken type=domain ile verilen izinler belirli bir alandaki herkes için geçerlidir.

  • role: role alanı, type tarafından gerçekleştirilebilecek işlemleri tanımlar. Örneğin, type=user ve role=reader içeren bir izin, belirli bir kullanıcıya dosya veya klasör için salt okuma erişimi verir. Alternatif olarak, type=domain ve role=commenter izinleri, alan adındaki herkesin dosyaya yorum eklemesine olanak tanır. Rollerin ve her birinin izin verdiği işlemlerin tam listesi için Roller ve izinler başlıklı makaleye bakın.

type=user veya type=group izni oluşturduğunuzda, belirli kullanıcıyı ya da grubu izinle ilişkilendirmek için emailAddress de sağlamanız gerekir.

type=domain iznini oluşturduğunuzda, belirli bir alanı izne bağlamak için domain de sağlamanız gerekir.

İzin oluşturmak için:

  1. İlişkili dosya veya klasör için fileId yol parametresiyle birlikte create() yöntemini kullanın.
  2. İstek gövdesinde type ve role değerlerini belirtin.
  3. type=user veya type=group ise emailAddress sağlayın. type=domain ise domain sağlayın.

Aşağıdaki kod örneğinde, iznin nasıl oluşturulacağı gösterilmektedir. Yanıtta, atanan permissionId dahil olmak üzere bir Permission kaynağının örneği döndürülür.

İstek

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

Yanıt

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

Hedef kitleleri kullanma

Hedef kitleler, kullanıcıların öğelerini paylaşmaları için önerebileceğiniz, bölümler veya ekipler gibi kullanıcı gruplarıdır. Kullanıcıları öğelerini kuruluşunuzun tamamı yerine daha belirli veya sınırlı kitlelerle paylaşmaya teşvik edebilirsiniz. Hedef kitleler, verilerinizin güvenliğini ve gizliliğini artırmanıza yardımcı olabilir ve kullanıcıların uygun şekilde paylaşım yapmasını kolaylaştırabilir. Daha fazla bilgi için Hedef kitleler hakkında başlıklı makaleyi inceleyin.

Hedef kitleleri kullanmak için:

  1. Google Yönetici Konsolu'nda Menü > Dizin > Hedef kitleler'e gidin.

    Hedef kitlelere gitme

    Bu görev için süper yönetici ayrıcalıklarına sahip bir hesapla oturum açmış olmanız gerekir.

  2. Hedef kitleler listesinde hedef kitlenin adını tıklayın. Hedef kitle oluşturmak için Hedef kitle oluşturma başlıklı makaleyi inceleyin.

  3. Hedef kitle URL'sinden benzersiz kimliği kopyalayın: https://admin.google.com/ac/targetaudiences/ID.

  4. type=domain ile izin oluşturun ve domain alanını ID.audience.googledomains.com olarak ayarlayın.

Kullanıcıların hedef kitlelerle nasıl etkileşim kurduğunu görmek için Bağlantı paylaşımıyla ilgili kullanıcı deneyimi başlıklı makaleyi inceleyin.

Tüm izinleri listeleme

Bir dosya, klasör veya ortak Drive'ın tüm izinlerini almak için list() yöntemini permissions kaynağında kullanın.

Aşağıdaki kod örneğinde, tüm izinlerin nasıl alınacağı gösterilmektedir. Yanıt, izinlerin listesini döndürür.

İstek

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

Yanıt

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

İzinleri güncelle

Bir dosya veya klasördeki izinleri güncellemek için atanan rolü değiştirebilirsiniz. Rol kaynağını bulma hakkında daha fazla bilgi için Rol kaynağını belirleme başlıklı makaleye bakın.

  1. update() yöntemini, permissions kaynağında çağırın. Bu yöntemde, permissionId yol parametresi değiştirilecek izne, fileId yol parametresi ise ilişkili dosya, klasör veya ortak drive'a ayarlanır. permissionId değerini bulmak için permissions kaynağında fileId yol parametresiyle list() yöntemini kullanın.

  2. İstekle yeni role'yı tanımlayın.

Kullanıcı veya grup zaten üye olsa bile ortak Drive'daki tek tek dosya ya da klasörlerde izin verebilirsiniz. Örneğin, Ali'nin ortak Drive üyeliği kapsamında role=commenter var. Ancak uygulamanız, Ali'ye ortak Drive'daki bir dosya için role=writer izni verebilir. Bu durumda, yeni rol üyelik üzerinden verilen rolden daha izin verici olduğundan, dosya veya klasör için etkili rol yeni izin olur.

Aşağıdaki kod örneğinde, bir dosya veya klasördeki izinlerin yorumcu rolünden yazar rolüne nasıl değiştirileceği gösterilmektedir. Yanıt, permissions kaynağının bir örneğini döndürüyor.

İstek

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

Yanıt

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

Rol kaynağını belirleme

Bir dosya veya klasördeki rolü değiştirmek için rolün kaynağını bilmeniz gerekir. Ortak Drive'larda bir rolün kaynağı, ortak Drive üyeliğine, klasördeki role veya dosyadaki role göre belirlenebilir.

Bir ortak Drive'ın veya bu Drive'daki öğelerin rol kaynağını belirlemek için fileId ve permissionId yol parametreleriyle get() yöntemini permissions kaynağında çağırın ve fields parametresini permissionDetails alanına ayarlayın.

permissionId değerini bulmak için permissions kaynağında fileId yol parametresiyle list() yöntemini kullanın. list isteğinde permissionDetails alanını getirmek için fields parametresini permissions/permissionDetails olarak ayarlayın.

Bu alan, kullanıcı, grup veya alan için devralınan ve doğrudan dosya izinlerinin tümünü listeler.

Aşağıdaki kod örneğinde, rol kaynağının nasıl belirleneceği gösterilmektedir. Yanıt, permissions kaynağının permissionDetails değerini döndürür. inheritedFrom alanı, iznin devralındığı öğenin kimliğini sağlar.

İstek

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

Yanıt

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

Toplu isteklerle birden fazla izni güncelleme

Birden fazla izni değiştirmek için toplu istekleri kullanmanızı önemle tavsiye ederiz.

Aşağıda, bir istemci kitaplığıyla toplu izin değişikliği yapma örneği verilmiştir.

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;
        }
    }
}

İzni silme

Bir dosya veya klasöre erişimi iptal etmek için fileId ve permissionId yol parametreleri iznin silinmesini sağlayacak şekilde ayarlanmış olarak permissions kaynağında delete() yöntemini çağırın.

"Drive'ım"daki öğeler için devralınan izinleri silebilirsiniz. Devralınan bir iznin silinmesi, öğeye ve varsa alt öğelere erişimi iptal eder.

Ortak Drive'daki öğeler için devralınan izinler iptal edilemez. Bunun yerine üst dosya veya klasördeki izni güncelleyin ya da silin.

delete() yöntemi, doğrudan paylaşılan bir Drive dosyasına veya klasörüne uygulanan izinleri silmek için de kullanılır.

Aşağıdaki kod örneğinde, permissionId silinerek erişimin nasıl iptal edileceği gösterilmektedir. Başarılı olursa yanıt gövdesi boş olur. İznin kaldırıldığını onaylamak için fileId yol parametresiyle permissions kaynağında list() yöntemini kullanın.

İstek

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

Dosya erişimini sınırlamak için geçerlilik bitiş tarihi belirleme

Hassas bir proje üzerinde başkalarıyla çalışıyorsanız belirli bir süre sonra bu kişilerin Drive'daki belirli dosyalara erişimini kısıtlamak isteyebilirsiniz. Drive'ım bölümündeki dosyalara erişimi sınırlayan veya kaldıran bir geçerlilik bitiş tarihi belirleyebilirsiniz.

Geçerlilik bitiş tarihini ayarlamak için:

  • create() yöntemini permissions kaynağında kullanın ve expirationTime alanını (diğer gerekli alanlarla birlikte) ayarlayın. Daha fazla bilgi için İzin oluşturma başlıklı makaleyi inceleyin.

  • permissions kaynağında update() yöntemini kullanın ve expirationTime alanını (diğer gerekli alanlarla birlikte) ayarlayın. Daha fazla bilgi için İzinleri güncelleme başlıklı makaleyi inceleyin.

expirationTime alanı, RFC 3339 tarih-saat kullanılarak iznin ne zaman sona erdiğini gösterir. Son kullanma süreleriyle ilgili aşağıdaki kısıtlamalar geçerlidir:

  • Yalnızca kullanıcı ve grup izinlerinde ayarlanabilirler.
  • Zaman gelecekte olmalıdır.
  • Zaman, bir yıldan fazla gelecekte olamaz.

Son kullanma tarihi hakkında daha fazla bilgi için aşağıdaki makaleleri inceleyin: