我正在尝试编写一个脚本,该脚本将返回与活动用户共享的每个文件的名称。但是我遇到了.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());
}
知道什么是错的?
答案 0 :(得分:4)
此处的问题是getAccess()
方法 - 同样适用于getSharingAccess()
和getSharingPermissions()
方法, - 仅适用于文件所有者和显式编辑器。未与共享的文件可以直接与用户一起编辑权限抛出您看到的错误。
但有几种解决办法可供选择:
如果您只需要通过&#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
}
如果您需要获取用户"可以编辑" 权限的文件,无论这些文件是与用户明确共享还是 不强>
首先,在脚本的高级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