【问题标题】:How to get permissionId in Drive API v3?如何在 Drive API v3 中获取 permissionId?
【发布时间】:2016-02-25 08:50:24
【问题描述】:

我想从文件中删除权限。

在 Drive API v2 中,

PermissionId permissionId = service.permissions().getIdForEmail(account).execute();
service.permissions().delete(fileId, permissionId.getId()).execute();

但是根据文档,permissions().getIdForEmail(String email) 被删除了,alternate 什么都不是。

https://developers.google.com/drive/v3/web/migration

我找不到如何从 drive API v3 中的特定电子邮件地址获取 permissionId

你有什么想法吗?

【问题讨论】:

标签: google-drive-api


【解决方案1】:

我找到了一个简单的解决方案:

        PermissionList permissions = service.permissions().list(sharedFolderId).setFields("nextPageToken, permissions(id,emailAddress)").execute();
        for (Permission p : permissions.getPermissions()) {
            if (p.getEmailAddress().equals(adresseEmail)) {
                service.permissions().delete(sharedFolderId, p.getId()).execute();
            }
        }

【讨论】:

  • 这工作 100%。我从未使用过 setFields 参数,但现在我看到了我可以从中得到什么。非常感谢!
【解决方案2】:

两年后,但您的问题是我在寻找解决方案时发现的第一个结果。我找到了一种解决方法,我希望这能帮助其他人解决同样的问题。这是我为获取权限 ID 所做的:

this.getPermissionId = function(emailAddress) {
    return new Promise((resolve, reject) => {

      const input = {
        q:  '"' + emailAddress + '" in writers or "' + emailAddress + '" in readers',
        fields: 'files(permissions)',
        pageSize: 1
      };

      const request = gapi.client.drive.files.list(input);

      request.execute(result => {
        if(result.error) {
          reject(result.error);
        } else if(result.files && result.files[0] && result.files[0].permissions && result.files[0].permissions[0]) {
          const permissions = result.files[0].permissions;
          let permissionId;
          permissions.forEach(permission => {
            if(permission.emailAddress == emailAddress) {
              permissionId = permission.id;
            }
          });

          if(permissionId) {
            resolve(permissionId);
          }

          else {
            reject('permissionIdUndefined');
          }
        }
      });


    })
  };

【讨论】:

    【解决方案3】:

    满足我需求的 .NET 版本

        public static string GetPermissionIdForEmail(DriveService service, string emailAddress)
        {
            string pageToken = null;
    
            do
            {
                var request = service.Files.List();
                request.Q = $"'{emailAddress}' in writers or '{emailAddress}' in readers or '{emailAddress}' in owners";
                request.Spaces = "drive";
                request.Fields = "nextPageToken, files(id, name, permissions)";
                request.PageToken = pageToken;
    
                var result = request.Execute();
    
                foreach (var file in result.Files.Where(f => f.Permissions != null))
                {
                    var permission = file.Permissions.SingleOrDefault(p => string.Equals(p.EmailAddress, emailAddress, StringComparison.InvariantCultureIgnoreCase));
    
                    if (permission != null)
                        return permission.Id;
                }
    
                pageToken = result.NextPageToken;
    
            } while (pageToken != null);
    
            return null;
        }
    

    【讨论】:

      【解决方案4】:

      我已经使用 C# 在 .NET 中完成了这段代码。

      希望您已经使用用户的访问令牌创建了驱动服务。

      之后这段代码可以帮你获取权限ID:

       var permissionFile = driveService.About.Get();
       permissionFile.Fields = "*";
       var perm = permissionFile.Execute();
       permissionId = perm.User.PermissionId;
      

      permissionId 将为您提供所需的 ID。

      【讨论】:

        【解决方案5】:

        我使用带有 Google Apps 脚本的 UrlFetchApp 来替换 Drive API v2 和 Advanced Drive Service(基于 v2)。

        使用公司域服务帐户,getService(userEmail) 部分使用库 https://github.com/googleworkspace/apps-script-oauth2 代表 userEmail 发送请求。

        /**
         * Get user permission Id.
         *
         * @param {String} userEmail - Email address for About query.
         * https://developers.google.com/drive/api/v3/reference/about
         */
        function TEST_getIdForEmailV3() { getIdForEmailV3('YourEmail@CompanyDomain.com') }
        function getIdForEmailV3(userEmail) {
          var service = getService(userEmail);
          if (service.hasAccess()) {
        
            var url = 'https://www.googleapis.com/drive/v3/about' + '?fields=user/permissionId';
            var options = {
              'method': 'get',
              'contentType': 'application/json',
              'headers': { Authorization: 'Bearer ' + service.getAccessToken() }
            };
            
            var response = UrlFetchApp.fetch(url, options);
            var resultParsed = JSON.parse(response.getContentText());
            return resultParsed.user.permissionId;
            
          } else {
            return 0;
          };
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-10
          • 2019-12-17
          • 2020-10-23
          相关资源
          最近更新 更多