有没有办法从脚本中排除未与用户明确共享的文件? (也就是与链接中的所有人共享的文件)

时间:2014-11-20 20:02:57

标签: javascript google-apps-script google-drive-api

我正在尝试编写一个脚本,该脚本将返回与活动用户共享的每个文件的名称。但是我遇到了.getAccess()方法的问题。

修改

所以我一直在修改代码,事实证明代码破坏了与“拥有链接的域中的所有人”共享的文件。所以现在的问题是避免与每个人共享的文件,但仍未在用户的驱动器中弹出而未与他们明确共享。

有没有办法说:

if (file.getAccess(user) == "VIEW" && file is explicitly shared with user)

or

&& file is not "Shared with everyone in the domain with the link"

旧问题: 当我在从特定ID访问的文件上使用它时,它完美地工作。 例如:

var id = "1HoJbszb1uLF1RZpU_IPv3O648pIeYs4IWK2kbbQ4IaA";
var file = DriveApp.getFileById(x);

Logger.log(file.getAccess(user));

日志:

EDIT

但是,如果我尝试遍历用户驱动器中的每个文件,我将收到错误“找不到具有给定ID的项目,或者您无权访问它”。

我尝试过这两种方式:

  while (files.hasNext()){
    var raw = files.next();
    var id = raw.getId();
    var file = DriveApp.getFileById(id);
    if (file.getAccess(user) == "EDIT" ) Logger.log(file.getAccess(user));
  }

  while (files.hasNext()){
    var file = files.next();
    if (file.getAccess(user) == "EDIT" ) Logger.log(file.getAccess(user)); 
  }

我在两个方面都尝试了同样的错误。我甚至检查确保.hasNext()方法正常工作,并确保当我要求日志只列出每个文件的名称时,只要.getAccess()永远不会被调用(所以没有如果声明)。

while (files.hasNext()){
  var file = files.next();
  Logger.log(file.getName());
}

知道什么是错的?

1 个答案:

答案 0 :(得分:4)

此处的问题是getAccess()方法 - 同样适用于getSharingAccess()getSharingPermissions()方法, - 仅适用于文件所有者和显式编辑器。未与共享的文件可以直接与用户一起编辑权限抛出您看到的错误。

但有几种解决办法可供选择:

  1. 如果您只需要通过&#34获得与用户明确共享的文件;可以编辑" 权限:

    检查getEditors().length是否有文件 - 如果是用户则为0 没有明确的"可以编辑" 对文件的权限,> 0如果 用户可以编辑文件。

    var f = DriveApp.getFileById(fileId);
    if ( f.getEditors().length ) {
      // this file has been explicitly shared with the user with "Can edit" permission
    }
    
  2. 如果您需要获取用户"可以编辑" 权限的文件,无论这些文件是与用户明确共享还是 不

    首先,在脚本的高级Google服务中启用 Drive API (在菜单资源下)和Google Developers Console中的more details on enabling advanced services can be found here。 之后,您可以通过检查用户对文件的权限 检查File.userPermission.role属性:

    var f = Drive.Files.get(fileId); // requires Drive API in Advanced Google services
    var up = f.userPermission;
    if (up.role=='writer') {
      // 'writer' = user has Edit permission to the file
    }
    
    用户拥有的文件

    File.userPermission.role writer "可以编辑" 权限,无论文件与文件共享的方式如何 用户(显式地,通过组/域成员身份或公共文件)。其他可能的值是 reader (用户有"可以查看" "可以对文件发表评论" 权限)和 所有者 (用户是文件的所有者/创建者)。 More info on userPermission property here