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

Her Google Drive dosyası, klasörü ve ortak drive'ı ilişkilendirmiş izinler kaynakları hakkında daha fazla bilgi edinin. Her kaynak belirli bir type (kullanıcı, grup, alan adı, herkes) için izni tanımlar ve role (örneğin, "yorumcu") veya "okuyucu" gibi bir ifade kullanabilirsiniz. Örneğin, bir dosyada belirli bir kullanıcıya (type=user) salt okuma erişimi veren izin (role=reader) ise başka bir izin belirli bir grubun üyelerine verir (type=group) dosyaya yorum ekleme özelliği (role=commenter).

Rollerin ve her bir rol tarafından izin verilen işlemlerin tam listesi için Roller ve izinleriyle ilgili daha fazla bilgi edinin.

Drive kaynaklarını paylaşma senaryoları

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

  1. Drive'ım bölümündeki bir dosyayı paylaşmak için kullanıcının role=writer sahibi olması gerekir veya role=owner.

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

    • writersCanShare Boole değeri dosya için False olarak ayarlanırsa kullanıcı daha serbest role=owner değerine sahip olmalıdır.

    • Geçici erişime (geçerlilik bitiş tarihi ve saati geçerlidir) izin verilmez role=writer ile Drive'ım klasörlerinde bulunabilir. Daha fazla bkz. Dosya erişimini sınırlamak için bir son kullanma tarihi belirleyin.

  3. Ortak drive'da dosya paylaşmak için kullanıcının role=writer sahibi olması gerekir. role=fileOrganizer veya role=organizer.

    • writersCanShare ayarı, ortak Drive'lardaki öğeler için geçerli değildir. Her zaman True olarak ayarlanmış gibi kabul edilir.
  4. Ortak Drive'da klasör paylaşabilmek için kullanıcının role=organizer sahibi olması gerekir.

    • Bir web sitesindeki sharingFoldersRequiresOrganizerPermission kısıtlaması ortak drive False olarak ayarlandı, role=fileOrganizer sahibi olan kullanıcılar şunları yapabilir: paylaşmalı.
  5. Ortak Drive üyeliğini yönetmek için kullanıcının role=organizer aboneliği olmalıdır. Yalnızca kullanıcılar ve gruplar, ortak drive'ların üyesi olabilir.

Dosya erişimini sınırlandırmak için son kullanma tarihi belirleme

Hassas bir projede insanlarla birlikte çalışırken belirli bir süre geçtikten sonra kullanıcıların Drive'daki belirli dosyalara erişimlerini gerekir. Drive'ım bölümündeki dosyalar için son kullanma tarihini o dosyaya erişimi sınırlandırabilir veya kaldırabilirsiniz.

Son kullanma tarihini ayarlamak için:

expirationTime alanı, RFC 3339 kullanılarak iznin süresinin ne zaman dolacağını belirtir tarih-saat , Sona erme zamanları aşağıdaki kısıtlamalara tabidir:

  • Yalnızca kullanıcı ve grup izinlerinde ayarlanabilir.
  • Zaman gelecekte olmalıdır.
  • Zaman, en fazla bir yıl sonrası olabilir.
ziyaret edin.

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

İzin yayılımı

Bir klasörün izin listeleri aşağı doğru yayılır ve tüm alt dosyalar ve klasörleri üst klasörden izinleri devralır. İzin verildiğinde veya değişiklik yapıldığında, dağılım iç içe geçmiş tüm dönüşümlerde yinelemeli klasörlerini tıklayın. Örneğin, bir dosya klasör içinde bulunuyorsa ve bu klasör daha sonra taşınırsa Başka bir klasörde de, yeni klasörün izinleri dosyaya uygulanır. Yeni klasör, dosyanın kullanıcısına "yazar" gibi yeni bir rol verirse o eski rolünü geçersiz kılar.

Buna karşılık, bir dosya role=writer öğesini bir klasörden devralıp "okuyucu" sağlayan başka bir klasör rolü varsa dosya artık role=reader.

Devralınan izinler, ortak Drive'daki bir dosya veya klasörden kaldırılamaz. Bunun yerine bu izinler, doğrudan veya dolaylı üst kuruluşta Bunlar daha sonra devralınır. Devralınan izinler şu altındaki öğelerden kaldırılabilir: "Drive'ım" veya "Benimle paylaşılanlar".

Diğer taraftan, devralınan izinler, Drive'a dokunun. Örneğin bir dosya, role=writer öğesini My Drive klasörünü kullanıyorsanız, dosyadaki role=reader özelliğini izin düzeyi.

İşlemler

İzinler kaynağı, geçerli kullanıcının dosya veya klasör üzerinde işlem gerçekleştirip gerçekleştiremeyeceğini belirler. Bunun yerine, Dosyalar kaynağı Bir işlemin yapılıp yapılamayacağını belirtmek için kullanılan boole capabilities alanları bir dosya veya klasör üzerinde gerçekleşebilir. Google Drive API, bu alanları Geçerli kullanıcının dosya veya klasörle ilişkili izin kaynağı.

Örneğin, Alex uygulamanıza giriş yapıp bir dosya paylaşmaya çalıştığında, Alex'in rolü dosyadaki izinler olup olmadığı kontrol edilir. Rol, kullanıcının dosya paylaşmasına izin veriyorsa dosyayla ilgili capabilities (ör. canShare) doldurulur göreceli olabilir. Alex dosyayı paylaşmak isterse uygulamanız canShare öğesinin true olarak ayarlandığından emin olmak için capabilities.

capabilities dosyasının alınmasına ilişkin bir örnek için Kullanıcıyı doğrulama bölümüne bakın izin isteyin.

İzin oluşturun

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

  • type - type iznin kapsamını tanımlar (user, group, domain veya anyone) tıklayın. type=user ile izin, belirli bir kullanıcı için geçerlidir type=domain ile başlayan izin belirli bir alan adındaki herkes için geçerlidir.

  • role: role alanı type öğesinin gerçekleştirebileceği işlemleri tanımlar. Örneğin, type=user izniyle ve role=reader ile belirli bir kullanıcıya izin verildiğinde dosyaya veya klasöre salt okuma erişimi sağlar. Veya type=domain ile bir izin ve role=commenter, alandaki herkesin bir dosyaya yorum eklemesine izin verir. Örneğin, rollerin ve her bir rolün izin verdiği işlemlerin tam listesini görmek için Roller ve izinleriyle ilgili daha fazla bilgi edinin.

type=user veya type=group olan bir izin oluşturduğunuzda ayrıca Bağlamak için bir emailAddress sağlayın ilgili kullanıcı veya grubu izne tabi tutabilirsiniz.

type=domain olan bir izin oluşturduğunuzda ayrıca Belirli bir alanı bağlamak için domain ekler.

İzin oluşturmak için:

  1. permissions.create yöntemini kullanma fileId ile ilişkilendirilmiş dosya veya klasör için.
  2. İstek gövdesinde type ve role değerlerini belirtin.
  3. type=user veya type=group ise bir emailAddress sağlayın. type=domain ise domain sağlayın.

Örnek göster

Aşağıdaki kod örneğinde, iznin nasıl oluşturulacağı gösterilmektedir. Yanıt, atanan permissionId dahil olmak üzere bir Permission kaynağının bir örneğini döndürü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, departmanlar veya ekipler gibi öğe paylaşmalarını sağlayacak bir öneride bulunabilir. Kullanıcıları içerik paylaşmaya teşvik edebilirsiniz. Tüm kitleniz yerine daha özel veya sınırlı bir kitleye sahip öğeler kurum içinde tutmaktır. Hedef kitleler, hesabınızın güvenliğini ve gizliliğini artırmanıza yardımcı ve kullanıcıların uygun şekilde paylaşmalarını kolaylaştırın. Daha fazla daha fazla bilgi için Hedef hakkında kitleler ,

Hedef kitleleri kullanmak için:

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

    Hedef kitleler'e git

    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. Alıcı: hedef kitle oluşturmak için Hedef oluşturma kitle

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

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

Kullanıcıların hedef kitlelerle nasıl etkileşime geçtiğini öğrenmek için Bağlantı için kullanıcı deneyimi başlıklı makaleyi inceleyin. paylaşma ,

Bir dosya, klasör veya ortak drive için tüm izinleri alma

permissions.list yöntemini kullanarak Bir dosya, klasör veya ortak drive için tüm izinleri alma

Örnek göster

Aşağıdaki kod örneğinde tüm izinlerin nasıl alınacağı gösterilmektedir. Yanıt, bir izin listesi 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"
    }
  ]
}

Kullanıcı izinlerini doğrulama

Uygulamanız bir dosyayı açtığında dosyanın özelliklerini kontrol etmeli ve geçerli kullanıcının izinlerini yansıtacak şekilde değiştirin. Örneğin, kullanıcı dosyada canComment özelliği yok, yorum yapabilir kullanıcı arayüzünde devre dışı bırakılmalıdır.

capabilities hakkında daha fazla bilgi için Özellikler'e bakın bölümüne bakın.

Özellikleri kontrol etmek için files.get numaralı telefonu şunu kullanarak arayın: fileId ve fields parametresi, capabilities alanına ayarlandı. Örneğin, fields parametresini kullanarak alanları döndürme hakkında daha fazla bilgi için bkz. Bir dosya için belirli alanları döndürün.

Örnek göster

Aşağıdaki kod örneğinde, kullanıcı izinlerinin nasıl doğrulanacağı gösterilmektedir. Yanıt, kullanıcının dosyada sahip olduğu özelliklerin listesini döndürür. Her özellik, kullanıcının yapabileceğ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,
    "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
  }
}

Ortak drive dosyaları için rolün kaynağını belirleyin ve klasörler

Bir dosya veya klasördeki rolü değiştirmek için rolün kaynağını bilmeniz gerekir. Ortak Drive'lardaki rolün kaynağı, ortak kullanılan veya dosyadaki role sahip olabilirsiniz.

Bir ortak drive'daki rolün veya ilgili öğelerin kaynağını belirlemek için şunun için permissions.get numaralı telefonu arayın: fileId, permissionId ve fields parametresi permissionDetails alanı. permissionId cihazını bulmak için şunu kullanın: fileId ile permissions.list. Alıcı: permissions.list isteğinde permissionDetails alanını getir, permissions/permissionDetails olarak belirlediğiniz fields parametresi.

Bu alan, kullanıcının devralınan ve doğrudan dosya izinlerini sıralar. grup veya alanınızdır.

Örnek göster

Aşağıdaki kod örneğinde, rol kaynağının nasıl belirleneceği gösterilmektedir. Yanıt, bir Permission 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
    }
  ]
}

İzinleri değiştir

Bir dosya veya klasördeki izinleri değiştirmek için atanan rolü değiştirebilirsiniz:

  1. permissions.update adlı iş ortağını şu numarayla ara: permissionId ve değiştirme izninin fileId veya ortak drive'ı seçin. permissionId cihazını bulmak için şunu kullanın: fileId ile permissions.list.

  2. İstekte yeni role öğesini tanımlayın.

Bir ortak Drive'daki dosya veya klasörler için tek tek izin verebilirsiniz. (kullanıcı veya grup zaten üyeyse). Örneğin, Ali role=commenter bir ortak drive üyeliği kapsamında. Ancak uygulamanız Alex'e Ortak drive'daki bir dosya için role=writer. Bu durumda yeni rol üyelikle verilen rolden daha serbestse, yeni model izni, dosya veya klasör için etkili rol haline gelir.

Örnek göster

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

İ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"
}

Dosya veya klasöre erişimi iptal etme

Bir dosyaya veya klasöre erişimi iptal etmek için şu numarayı arayın: fileId ve delete İzni silmek için permissionId.

"Drive'ım" bölümündeki öğeler için devralınan bir öğeyi silmek mümkündür iznidir. Devralınan bir iznin silinmesi öğeye erişimi iptal eder ve alt öğelere (varsa) dokunun.

Bir ortak drive'daki öğeler için, devralınan izinler iptal edilemez. Güncelleme veya üst dosya veya klasördeki izni iptal edebilir.

delete işlemi, doğrudan bir ortak drive dosya veya klasöründe bulabilirsiniz.

Örnek göster

Aşağıdaki kod örneğinde, bir permissionId öğesini silerek erişimi nasıl iptal edeceğiniz gösterilmektedir. Başarılı olursa yanıt gövdesi boş olur. İznin kaldırıldığını onaylamak için permissions.list iznini fileId ile birlikte kullanın.

İstek

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

Dosya sahipliğini aynı kuruluştaki başka bir Google Workspace hesabına aktarma

"Drive'ım" bölümündeki mevcut dosyaların sahipliği şuradan aktarılabilir: bir Google Workspace hesabı aynı kuruluştaki başka bir hesaba bağlayabilirsiniz. Paylaşılan bir öğenin sahibi olan içindeki dosyaların sahibi olur. Bu nedenle, sahiplik aktarımları desteklenmez. ortak drive'lardaki dosyalar ve klasörler için. Ortak drive'ı düzenleyenler taşıyabilir öğeleri ilgili ortak drive'dakilere ve kendilerine ait "Drive'ım" bölümüne hangi sahipliği kendisine devreder.

"Drive'ım" bölümündeki bir dosyanın sahipliğini aktarmak için aşağıdakilerden birini yapın: takip etmek için:

  • Belirli bir kullanıcıya dosya izni veren oluşturma (type=user) sahip erişimi (role=owner).

  • Mevcut bir dosyanın iznini role=owner ile güncelleyip aktarın belirtilen kullanıcıya (transferOwnership=true) devredebilir.

ziyaret edin.

Dosya sahipliğini bir tüketici hesabından diğerine aktarma

Dosyaların sahipliği, bir tüketici hesabı arasında başka bir tüketici hesabına aktarılabilir. Ancak Drive, bir dosyanın sahipliğini tüketici hesaplar . Aktarmak için bir tüketici hesabından diğerine dosya sahipliğini:

  1. Geçerli sahip, hesap oluşturarak veya güncelleyerek bir sahiplik aktarımı başlatır dosya izninin verilmesi gerekir. İzin şunları içermelidir: şu ayarlar: role=writer, type=user ve pendingOwner=true. Öğe yeni sahip, potansiyel sahip için bir izin oluşturuyor. Bu, potansiyel yeni sahibe, satın alma işleminin dosyanın sahipliğini üstlenmeniz istenir.

  2. Yeni sahip, sahiplik aktarma isteğini oluşturarak veya güncelleyerek kabul eder. . İzin şu ayarları içermelidir: role=owner ve transferOwnership=true. Yeni sahip, yeni izin verildiğinde önceki sahibe bir e-posta bildirimi gönderilir gösteren bir uyarı simgesi içerir.

Bir dosya aktarıldığında, önceki sahibin rolü writer düzeyine düşürülür.

Toplu isteklerle birden fazla izni değiştirme

Şunu kesinlikle öneririz: birden fazla öğeyi değiştirmek için toplu istekler izin verir.

Aşağıda, kullanabilirsiniz.

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