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 yayılma şekli

İzinler, üst klasörlerden tüm alt öğelere doğru yayılır:

  • Varsayılan olarak devralınır: Tüm alt dosya ve klasörler, üst klasörlerindeki izinleri otomatik olarak devralır.
  • Alt öğelerde azaltılamaz: Bir alt öğede devralınan izni kaldıramaz veya azaltamazsınız. Değişiklikler, kaynağı oluşturan üst klasörde yapılmalıdır veya klasörde sınırlı erişim ayarı kullanılmalıdır.
  • Alt öğelerde genişletilebilir: Bir alt öğe, daha kapsamlı bir rol verebilir. Örneğin, kullanıcının role=reader iznine sahip olduğu bir klasördeki dosyaya role=writer izni verilebilir.
  • Taşındığında yeniden değerlendirilir: Bir öğenin yeni bir üst klasöre taşınması, yeni üst klasörün izinlerinin öğeye ve alt öğelerine yeniden değerlendirilip uygulanmasına neden olur.

Dosya bağlantıları ve erişim denetimi

Belirli bir kullanıcı veya grupla dosya ya da klasör paylaştığınızda öğeye erişmek için kullanılan URL değişmez ve her kullanıcı için benzersiz bir bağlantı oluşturulmaz. Bunun yerine, öğenin fileId özelliğine dayalı tek ve sabit bir bağlantısı vardır.

Drive, öğenin EKL'sini değerlendirerek erişimi kontrol eder. Kullanıcı bir bağlantıyı açmaya çalıştığında Drive, kimliği doğrulanmış kimliğini ACL'ye göre doğrular. Bir izin iptal edilirse veya geçerlilik bitiş tarihine ulaşırsa kullanıcı, ACL'den kaldırılır. Kullanıcı bağlantıyı tekrar ziyaret etmeye çalışırsa Drive erişimi reddeder.

Dosya özelliklerini anlama

permissions kaynağı, kimin erişimi olduğunu (ACL) tanımlar ancak mevcut kullanıcının uygulamanızın kullanıcı arayüzünde belirli bir işlemi yapıp yapamayacağını doğrudan belirtmez.

Bunun yerine, files kaynağı, Google Drive API'nin kullanıcının rolüne ve öğe ayarlarına göre dinamik olarak hesapladığı bir boolean capabilities alanları (ör. canComment, canShare veya canDelete) koleksiyonunu içerir.

Dosya özelliklerini kullanma

Uygulamanızın kullanıcı arayüzünü oluştururken izinleri doğrudan ayrıştırmak yerine files.capabilities öğesini kontrol edin:

  • files.get yöntemini fields=capabilities ile çağırın. Daha fazla bilgi için Belirli alanları döndürme başlıklı makaleyi inceleyin.
  • Arayüzünüzde ilgili işlemleri etkinleştirmek veya devre dışı bırakmak için döndürülen boole işaretlerini kullanın. Örneğin, canComment değeri false ise yorum yapma özelliğini devre dışı bırakın.

Drive kaynaklarını paylaşma senaryoları

Aşağıdaki tabloda, Drive kaynaklarının farklı konumlar ve öğe türleri arasında paylaşılması için gereken roller ve koşullar gösterilmektedir:

Konum Öğe Gerekli roller Temel kısıtlamalar
Drive'ım Dosya veya klasör owner veya writer owner gerektirir.writersCanShare=false.
Klasörlerde erişim süresi sonu için reader gerekir (bkz. Geçerlilik bitiş tarihi belirleme).
Ortak Drive Dosya organizer, fileOrganizer veya writer writersCanShare her zaman true olarak ele alınır.
Ortak Drive Klasör organizer fileOrganizer, sharingFoldersRequiresOrganizerPermission false ise de paylaşabilir.
Ortak Drive Üyelik organizer Yalnızca user veya group için geçerlidir (alanlar için geçerli değildir).

İzinleri yönetme

Aşağıdaki tabloda, permissions kaynağında kullanılabilen yöntemler özetlenmiştir:

Yöntem API uç noktası Temel parametreler Referans
Oluştur POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions role, type, emailAddress veya domain permissions.create
Al GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} fields permissions.get
Listele GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions pageSize, supportsAllDrives ve pageToken permissions.list
Güncelle PATCH https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} role, allowFileDiscovery permissions.update
Sil DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} supportsAllDrives permissions.delete

İzin oluşturma

Bir dosyayı, klasörü veya ortak Drive'ı paylaşmak için fileId ile permissions kaynağında create yöntemini çağırın. İzin oluşturma işlemi, öğeye yeni bir EKL girişi ekler ve atanmış bir permissionId döndürür.

İstek gövdesinde aşağıdaki alanları belirtin:

  • role: Verilecek erişim düzeyi (ör. reader, commenter veya writer). Tam liste için Roller ve izinler başlıklı makaleyi inceleyin.
  • type: Hak sahibinin kapsamı (user, group, domain veya anyone).
  • Grantee identifier (required based on type):
    • emailAddress: type, user veya group olduğunda zorunludur.
    • domain: type, domain olduğunda zorunludur.

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

İstek

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

Yanıt

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

Hedef kitlelerle paylaşma

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.

Hedef kitleyle paylaşmak için type=domain ve domain ayarlarını <TARGET_AUDIENCE_ID>.audience.googledomains.com olarak belirleyin. Google Yönetici Konsolu'nda hedef kitleleri bulma veya oluşturma hakkında ayrıntılı bilgi için Hedef kitleler hakkında başlıklı makaleyi inceleyin.

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.

İzin alma

İzin almak için get yöntemini permissions kaynağında fileId ve permissionId yol parametreleriyle çağırın. İzin kimliğini bilmiyorsanız önce tüm izinleri listeleyin.

İzinleri listeleme

Bir dosya, klasör veya ortak Drive'ın izinlerini listelemek için gerekli fileId yol parametresiyle permissions kaynağında list yöntemini çağırın.

Yanıtı sayfalandırmak veya filtrelemek için aşağıdaki isteğe bağlı sorgu parametrelerinden herhangi birini ekleyebilirsiniz:

  • pageSize (isteğe bağlı): Sayfa başına döndürülecek maksimum izin sayısı. Ortak Drive'daki dosyalar için ayarlanmamışsa en fazla 100 sonuç döndürülür. Ortak Drive'da olmayan dosyalar için ayarlanmamışsa listenin tamamı döndürülür.

  • pageToken (isteğe bağlı): Sonraki sayfayı almak için önceki liste çağrısından alınan bir sayfa jetonu.

  • supportsAllDrives (isteğe bağlı): İstekte bulunan uygulamanın hem Drive'ım hem de ortak Drive'ları destekleyip desteklemediği.

  • useDomainAdminAccess (isteğe bağlı): İsteği alan yöneticisi olarak göndermek için true olarak ayarlayın. İstek sahibi, fileId parametresi bir ortak Drive'ı ifade ediyorsa ve istek sahibi, ortak Drive'ın ait olduğu alanın yöneticisiyse erişim izni verilir. Daha fazla bilgi için Ortak Drive'ları alan yöneticileri olarak yönetme başlıklı makaleyi inceleyin.

  • includePermissionsForView (isteğe bağlı): Yanıta eklenecek ek görüntüleme izinleri. Yalnızca published desteklenir.

  • fields (isteğe bağlı): Yanıtta döndürülecek belirli alanlar. Varsayılan olarak, list yalnızca id, type, kind ve role değerlerini döndürür. Ek alanlar (ör. permissionDetails) döndürmek için bu parametreyi kullanarak alanları belirtin. Daha fazla bilgi için Belirli alanları döndürme başlıklı makaleyi inceleyin.

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 öğesini bulmak için permissions kaynağında fileId yol parametresiyle birlikte 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
    }
  ]
}

İzni güncelleme

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. fileId yolu parametresi ilişkili dosya, klasör veya ortak drive'a, permissionId yolu parametresi ise değiştirilecek izne ayarlanmış şekilde update yöntemini permissions kaynağında çağırın. permissionId öğesini bulmak için fileId yol parametresine sahip permissions kaynağında list yöntemini kullanın.

  2. İstekte yeni role'yı belirtin.

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.

Güncellemeleri yama semantiği aracılığıyla uygulayabilirsiniz. Bu sayede, bir kaynakta kısmi değişiklikler yapabilirsiniz. İsteğinizde değiştirmek istediğiniz alanları açıkça ayarlamanız gerekir. İsteğe dahil edilmeyen alanlar mevcut değerlerini korur. Daha fazla bilgi için Kısmi kaynaklarla çalışma başlıklı makaleyi inceleyin.

Rolleri değiştirmenin yanı sıra, izin type domain anyone olduğunda öğelerin bulunabilirliğini de değiştirebilirsiniz. Paylaşılan bir dosyanın aranabilir veya listelenmemiş olması için yama isteğinize allowFileDiscovery boolean alanını ekleyin. Bu ayarın true olarak belirlenmesi, öğenin doğrudan bağlantısı verilmemiş olsa bile belirtilen kitleye yönelik arama sonuçlarında görünmesini sağlar. Bu ayarı değiştirmek için izni silip yeniden oluşturmanız gerekmez.

Aşağıdaki kod örneğinde, bir dosya veya klasördeki izinlerin commenter'dan writer'a nasıl değiştirileceği gösterilmektedir. Yanıt, permissions kaynağının bir örneğini döndürür.

İstek

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

Yanıt

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

Toplu isteklerle birden fazla izni güncelleme

Aynı dosya, klasör veya ortak drive'da eşzamanlı izin değişiklikleri desteklenmez. Bu sınırlama, aynı alıcının veya farklı alıcıların izinlerini değiştirmenize ve isteklerin tek bir uygulamadan mı yoksa birden fazla kullanıcıdan mı geldiğine bakılmaksızın tüm değiştirme işlemleri (ör. güncelleme veya silme) için geçerlidir.

Drive, bir öğenin izinlerini tek bir erişim kontrol listesi (ACL) olarak değerlendirir ve günceller. Eş zamanlı işlemler, "son yazma işlemi kazanır" şeklinde yarış koşullarına neden olur. Bu durum, izin değişikliklerinin sessizce üzerine yazılmasına veya sharingRateLimitExceeded hatalarının tetiklenmesine yol açabilir.

Çakışmaları önlemek için aynı öğede izin değişikliklerini sırayla uygulayın veya tek bir istekte birden fazla izni değiştirmek için toplu istekleri kullanın.

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
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';

/**
 * Shares a file with a user and a domain.
 * @param {string} fileId The ID of the file to share.
 * @param {string} targetUserEmail The email address of the user to share with.
 * @param {string} targetDomainName The domain to share with.
 * @return {Promise<Array<string>>} A promise that resolves to an array of permission IDs.
 */
async function shareFile(fileId, targetUserEmail, targetDomainName) {
  // Authenticate with Google and get an authorized client.
  // TODO (developer): Use an appropriate auth mechanism for your app.
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });

  // Create a new Drive API client (v3).
  const service = google.drive({version: 'v3', auth});

  /** @type {Array<string>} */
  const permissionIds = [];

  // The permissions to create.
  const permissions = [
    {
      type: 'user',
      role: 'writer',
      emailAddress: targetUserEmail, // e.g., 'user@partner.com'
    },
    {
      type: 'domain',
      role: 'writer',
      domain: targetDomainName, // e.g., 'example.com'
    },
  ];

  // Iterate through the permissions and create them one by one.
  for (const permission of permissions) {
    const result = await service.permissions.create({
      requestBody: permission,
      fileId,
      fields: 'id',
    });

    if (result.data.id) {
      permissionIds.push(result.data.id);
      console.log(`Inserted permission id: ${result.data.id}`);
    } else {
      throw new Error('Failed to create permission');
    }
  }
  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 parametreleriyle permissions kaynağında delete yöntemini çağırın.

Devralınan izinler, alt öğelerde doğrudan iptal edilemez. Bunun yerine üst klasördeki izni güncelleyin veya silin (ya da sınırlı erişim ayarını kullanın).

Bir kullanıcının erişimini üst öğeden kaldırdığınızda yalnızca üst öğeden devralınan izinlerin iptal edildiğini unutmayın. Kullanıcıya bir alt öğe üzerinde doğrudan izinler de verilmişse bu doğrudan erişim devam eder. Bir iznin kaldırıldığını onaylamak için fileId ile list işlevini çağırın.

Geçerlilik bitiş tarihi belirleyin

Bir dosya veya klasöre geçici erişim izni vermek için create veya update yöntemlerini çağırırken expirationTime alanını (RFC 3339 tarih-saat) ayarlayın.

Son kullanma süreleriyle ilgili aşağıdaki kısıtlamalar geçerlidir:

  • Yalnızca user ve group izinlerinde ayarlanabilir (domain veya anyone izinlerinde ayarlanamaz).
  • Zaman, en fazla bir yıl sonra olacak şekilde gelecekte olmalıdır.
  • Klasörlerde geçici erişim yalnızca reader rolüyle desteklenir.