Compartilhar arquivos, pastas e unidades

Cada arquivo, pasta e drive compartilhado do Google Drive tem recursos associados permissions. Cada recurso identifica a permissão para um type (user, group, domain, anyone) e role (owner, organizer, fileOrganizer, writer, commenter, reader). Por exemplo, um arquivo pode ter uma permissão que concede a um usuário específico (type=user) acesso somente leitura (role=reader), enquanto outra permissão concede aos membros de um grupo específico (type=group) a capacidade de adicionar comentários a um arquivo (role=commenter).

Para conferir uma lista completa de papéis e as operações permitidas por cada um, consulte Papéis e permissões.

Como as permissões funcionam

As listas de permissões de uma pasta são propagadas para baixo. Todos os arquivos e pastas filhos herdam permissões do pai. Sempre que as permissões ou a hierarquia são alteradas, a propagação ocorre de forma recursiva em todas as pastas aninhadas. Por exemplo, se um arquivo existir em uma pasta e essa pasta for movida para outra, as permissões da nova pasta serão propagadas para o arquivo. Se a nova pasta conceder ao usuário do arquivo um novo papel, como "gravador", ela vai substituir o papel antigo.

Por outro lado, se um arquivo herdar role=writer de uma pasta e for movido para outra que forneça um papel de "leitor", o arquivo vai herdar role=reader.

As permissões herdadas não podem ser removidas ou reduzidas em nenhum item. Em vez disso, essas permissões precisam ser ajustadas no pai de onde se originam ou uma pasta na hierarquia precisa ativar a configuração de acesso limitado.

As permissões herdadas podem ser aumentadas em um item. Se uma permissão for aumentada em um filho, a mudança da permissão de um pai não vai afetar a permissão do filho, a menos que a nova permissão do pai seja maior que a do filho.

Não há suporte para operações de permissões simultâneas no mesmo arquivo. Somente a última atualização é aplicada.

Entender as capacidades de arquivos

O recurso permissions não determina a capacidade do usuário atual de realizar ações em um arquivo ou pasta. Em vez disso, o recurso files contém uma coleção de campos booleanos capabilities usados para indicar se uma ação pode ser realizada em um arquivo ou pasta. A API Google Drive define esses campos com base no recurso permissions do usuário atual associado ao arquivo ou pasta.

Por exemplo, quando Alex faz login no seu app e tenta compartilhar um arquivo, o papel de Alex é verificado para permissões no arquivo. Se o papel permitir que ele compartilhe um arquivo, as capabilities relacionadas ao arquivo, como canShare, serão definidas em relação ao papel. Se Alex quiser compartilhar o arquivo, seu app vai verificar as capabilities para garantir que canShare esteja definido como true.

Receber capacidades de arquivos

Quando o app abre um arquivo, ele precisa verificar as capacidades do arquivo e renderizar a interface para refletir as permissões do usuário atual. Por exemplo, se o usuário não tiver a capacidade canComment no arquivo, a capacidade de comentar deverá ser desativada na interface.

Para verificar as capacidades, chame o get método no recurso files com o parâmetro de caminho fileId e o parâmetro fields definido como o campo capabilities. Para mais informações sobre como retornar campos usando o fields parâmetro, consulte Retornar campos específicos.

O exemplo de código a seguir mostra como verificar as permissões do usuário. A resposta retorna uma lista de capacidades que o usuário tem no arquivo. Cada capacidade corresponde a uma ação refinada que um usuário pode realizar. Alguns campos só são preenchidos para itens em drives compartilhados.

Solicitação

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

Resposta

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

Cenários para compartilhar recursos do Drive

Há cinco tipos diferentes de cenários de compartilhamento:

  1. Para compartilhar um arquivo no Meu Drive, o usuário precisa ter role=writer ou role=owner.

  2. Para compartilhar uma pasta no Meu Drive, o usuário precisa ter role=writer ou role=owner.

    • Se o valor booleano writersCanShare estiver definido como false para o arquivo, o usuário precisará ter o role=owner mais permissivo.

    • O acesso temporário (regido por uma data e hora de validade) só é permitido em pastas com role=reader. Para mais informações, consulte consulte Definir uma data de validade para limitar o acesso a itens.

  3. Para compartilhar um arquivo em um drive compartilhado, o usuário precisa ter role=writer, role=fileOrganizer ou role=organizer.

    • A configuração writersCanShare não se aplica a itens em drives compartilhados. Ela é tratada como se estivesse sempre definida como true.
  4. Para compartilhar uma pasta em um drive compartilhado, o usuário precisa ter role=organizer.

    • Se a sharingFoldersRequiresOrganizerPermission restrição em um drive compartilhado estiver definida como false, os usuários com role=fileOrganizer poderão compartilhar pastas nesse drive compartilhado.
  5. Para gerenciar a participação em drives compartilhados, o usuário precisa ter role=organizer. Somente usuários e grupos podem ser membros de drives compartilhados.

Usar o parâmetro "fields"

Se você quiser especificar os campos a serem retornados na resposta, defina o fields parâmetro do sistema com qualquer método do recurso permissions. Se você omitir o parâmetro fields, o servidor vai retornar um conjunto padrão de campos específicos do método. Por exemplo, o list método retorna apenas os campos id, type, kind e role para cada arquivo. Para retornar campos diferentes, consulte Retornar campos específicos.

Criar uma permissão

Os dois campos a seguir são necessários ao criar uma permissão:

  • type: O type identifica o escopo da permissão (user, group, domain, ou anyone). Uma permissão com type=user se aplica a um usuário específico, enquanto uma permissão com type=domain se aplica a todos em um domínio específico.

  • role: o campo role identifica as operações que o type pode realizar. Por exemplo, uma permissão com type=user e role=reader concede a um usuário específico acesso somente leitura ao arquivo ou pasta. Ou, uma permissão com type=domain e role=commenter permite que todos no domínio adicionem comentários a um arquivo. Para conferir uma lista completa de papéis e as operações permitidas por cada um, consulte Papéis e permissões.

Ao criar uma permissão em que type=user ou type=group, você também precisa fornecer um emailAddress para vincular o usuário ou grupo específico à permissão.

Ao criar uma permissão em que type=domain, você também precisa fornecer um domain para vincular um domínio específico à permissão.

Para criar uma permissão:

  1. Use o create método no permissions recurso com o fileId parâmetro de caminho para o arquivo ou pasta associado.
  2. No corpo da solicitação, especifique o type e o role.
  3. Se type=user ou type=group, forneça um emailAddress. Se type=domain, forneça um domain.

O exemplo de código a seguir mostra como criar uma permissão. A resposta retorna uma instância de um recurso permissions, incluindo o permissionId atribuído.

Solicitação

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

Resposta

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

Usar públicos-alvo

Os públicos-alvo são grupos de pessoas, como departamentos ou equipes, que você recomenda para os usuários compartilharem itens. Você pode incentivar os usuários a compartilhar itens com um público mais específico ou limitado, em vez de toda a organização. Os públicos-alvo podem ajudar a melhorar a segurança e a privacidade dos seus dados e facilitar o compartilhamento adequado para os usuários. Para mais informações, consulte Sobre públicos-alvo.

Para usar públicos-alvo:

  1. No Google Admin Console, acesse Menu > Diretório > Públicos-alvo.

    Acessar públicos-alvo

    Você precisa fazer login com uma conta com privilégios de superadministrador para essa tarefa.

  2. Na lista de públicos-alvo, clique no nome do público-alvo. Para criar um público-alvo, consulte Criar um público alvo.

  3. Copie o ID exclusivo do URL do público-alvo: https://admin.google.com/ac/targetaudiences/ID.

  4. Crie uma permissão com type=domain e defina o campo domain como ID.audience.googledomains.com.

Para saber como os usuários interagem com os públicos-alvo, consulte Experiência do usuário para compartilhamento de links.

Receber uma permissão

Para receber uma permissão, use o get método no recurso permissions com os fileId e permissionId parâmetros de caminho. Se você não souber o ID da permissão, poderá listar todas as permissões usando o método list.

O exemplo de código a seguir mostra como receber uma permissão por ID. A resposta retorna uma instância de um recurso permissions.

Solicitação

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

Resposta

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

Listar todas as permissões

Para listar permissões de um arquivo, pasta ou drive compartilhado, use o list método no permissions recurso com o fileId parâmetro de caminho.

Transmita os seguintes parâmetros de consulta para personalizar a paginação ou filtrar permissões:

  • pageSize: o número máximo de permissões a serem retornadas por página. Se não estiver definido para arquivos em um drive compartilhado, no máximo 100 resultados serão retornados. Se não estiver definido para arquivos que não estão em um drive compartilhado, a lista inteira será retornada.

  • pageToken: um token de página, recebido de uma chamada de lista anterior. Forneça esse token para recuperar a página subsequente.

  • supportsAllDrives: indica se o app solicitante oferece suporte ao Meu Drive e aos drives compartilhados.

  • useDomainAdminAccess: defina como true para emitir a solicitação como um administrador de domínio. Se o parâmetro fileId se referir a um drive compartilhado e o solicitante for um administrador do domínio a que o drive compartilhado pertence. Para mais informações, consulte Gerenciar drives compartilhados como administradores.

  • includePermissionsForView: as permissões da visualização adicional a serem incluídas na resposta. Somente published é compatível.

O exemplo de código a seguir mostra como receber todas as permissões. A resposta retorna uma lista de permissões para um arquivo, pasta ou drive compartilhado.

Solicitação

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

Resposta

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

Atualizar permissões

Para atualizar as permissões de um arquivo ou pasta, você pode mudar o papel atribuído. Para mais informações sobre como encontrar a origem da função, consulte Determinar a origem da função.

  1. Chame o update método no permissions recurso com o fileId parâmetro de caminho definido como o arquivo, pasta ou drive compartilhado associado e o permissionId parâmetro de caminho definido como a permissão a ser alterada. Para encontrar o permissionId, use o list método no recurso permissions com o parâmetro de caminho fileId.

  2. Na solicitação, identifique o novo role.

Você pode conceder permissões em arquivos ou pastas individuais em um drive compartilhado, mesmo que o usuário ou grupo já seja um membro. Por exemplo, Alex tem role=commenter como parte da participação em um drive compartilhado. No entanto, seu app pode conceder a Alex role=writer para um arquivo em um drive compartilhado. Nesse caso, como o novo papel é mais permissivo do que o papel concedido pela participação, a nova permissão se torna o papel efetivo para o arquivo ou pasta.

Você pode aplicar atualizações usando a semântica de patch, o que significa que é possível fazer modificações parciais em um recurso. É necessário definir explicitamente os campos que você pretende modificar na solicitação. Todos os campos não incluídos na solicitação mantêm os valores atuais. Para mais informações, consulte Trabalhar com recursos parciais.

O exemplo de código a seguir mostra como mudar as permissões de um arquivo ou pasta de commenter para writer. A resposta retorna uma instância de um recurso permissions.

Solicitação

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

Resposta

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

Determinar a origem do papel

Para mudar o papel em um arquivo ou pasta, você precisa saber a origem do papel. Para drives compartilhados, a origem de um papel pode ser baseada na participação no drive compartilhado, no papel em uma pasta ou no papel em um arquivo.

Para determinar a origem do papel de um drive compartilhado ou de itens nesse drive, chame o get método no permissions recurso com os fileId e permissionId parâmetros de caminho, e o fields parâmetro definido como o permissionDetails campo.

Para encontrar o permissionId, use o list método no permissions recurso com o fileId parâmetro de caminho. Para buscar o permissionDetails campo na solicitação list, defina o parâmetro fields como permissions/permissionDetails.

Esse campo enumera todas as permissões de arquivo herdadas e diretas para o usuário, grupo ou domínio.

O exemplo de código a seguir mostra como determinar a origem do papel. A resposta retorna o permissionDetails de um recurso permissions. O campo inheritedFrom fornece o ID do item de que a permissão é herdada.

Solicitação

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

Resposta

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

Atualizar várias permissões com solicitações em lote

Recomendamos o uso de solicitações em lote para modificar várias permissões.

Confira a seguir um exemplo de como realizar uma modificação de permissão em lote com uma biblioteca de cliente.

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

Excluir uma permissão

Para revogar o acesso a um arquivo ou pasta, chame o delete método no permissions recurso com os fileId e os permissionId parâmetros de caminho definidos para excluir a permissão.

As permissões herdadas não podem ser revogadas. Atualize ou exclua a permissão na pasta mãe. A exclusão de uma permissão em uma pasta também revoga qualquer acesso equivalente em itens filhos.

A redução de permissões em comparação com um pai exige o uso da configuração de acesso limitado.

O exemplo de código a seguir mostra como revogar o acesso excluindo um permissionId. Se não houver nenhum problema, o corpo da resposta será um objeto JSON vazio. Para confirmar se a permissão foi removida, use o list método no recurso permissions com o parâmetro de caminho fileId.

Solicitação

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

Definir uma data de validade para limitar o acesso a itens

Ao trabalhar com pessoas em um projeto sensível, talvez você queira restringir o acesso delas a determinados itens no Drive após um período. Para arquivos e pastas, é possível definir uma data de validade para limitar ou remover o acesso a esse item.

Para definir a data de validade:

O expirationTime campo indica quando a permissão expira usando RFC 3339 data e hora. Os horários de validade têm as seguintes restrições:

  • Só podem ser definidos em permissões de usuário e grupo.
  • O horário precisa ser no futuro.
  • O horário não pode ser mais de um ano no futuro.
  • Somente o papel reader é qualificado para acesso temporário em uma pasta.

Para mais informações sobre a data de validade, consulte os seguintes artigos: