DriveApp .addViewer()。addEditor()内部文件夹文件不继承权限

时间:2013-10-17 08:03:11

标签: google-apps-script

在从编辑更改为查看权限后,我遇到了嵌套在不继承文件夹权限的文件夹中的DriveApp文件的问题。步骤如下:

通过以下方式将具有“编辑”权限的文件夹(包含内部文件)添加到另一个用户的驱动器:

userFolder.addFolder(folderToShare);
folderToShare.addEditor(user);

...然后再次添加文件夹,这次将“编辑”更改为“查看”权限:

userFolder.addFolder(folderToShare);
folderToShare.addViewer(user); 

“folder”中的内部文件应根据父文件夹的权限更改权限。当“folder”更改为用户的“view”权限时,用户应继承文件夹中文件的“查看”权限。但是,如果用户在调用folder.addViewer(user)时对“folder”中的文件具有“edit”权限,则该文件夹将获得“查看”权限,但文件夹中的文件仍保留用户的“编辑”权限不变。

var folderToShare = DriveApp.getFolderById(folderId);
var userFolders = DriveApp.getFoldersByName(thisUser[1]);
if (userFolders.hasNext() == false) {
  // do something
} else var userFolder = userFolders.next(); 
userFolder.addFolder(folderToShare);
folderToShare.addEditor(thisUser[1]);  
// folder and files in folder get edit permission
// trying the following on the folder results in view permission on the folder, but edit permission remains on the folder's files
userFolder.addFolder(folderToShare);            
folderToShare.addViewer(thisUser[1]);

我在使用.addViewer(用户)之前尝试过.removeEditor(用户),但无济于事。我是否需要调用folderToShare.getFiles()并迭代以更改每个文件的权限,或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

我使用了Utilities.sleep(5000)作为.removeEditor()之后和完成.addViewer()函数之前的起点,这似乎可以解决问题!在添加查看器之前,只需要一两毫秒即可完成编辑器的删除。我会尝试在一个甜点上磨一段时间。

以下是最终代码:

if (sharingPermissions == 'edit' || sharingPermissions == 'submit') {
      userFolder.addFolder(folderToShare);
      folderToShare.addEditor(thisUser[1]); 
    } else if (sharingPermissions == 'view') {         
        try {folderToShare.removeEditor(thisUser[1]);}
        catch (error) {}
        Utilities.sleep(5000);
        userFolder.addFolder(folderToShare); 
        folderToShare.addViewer(thisUser[1]);
      }  

现在似乎工作正常......