我想知道是否有人可以提供帮助。我们使用Google Apps for Education。在系统中,我们有一个共享文件夹,教师可以在其中放置文件供学生访问。例如。整个由8名科学教师组成的团队都将文件添加到“科学共享”中。
Science共享文件夹位于单独的Google帐户“science-shared@domain.com”
随着时间的推移,文件将占用单个用户的配额,如果他们离开并且他们的帐户被删除,所有这些文件都会被删除。我们显然不希望使用转移设施将他们的整个数据转移到科学共享。
理想情况下,我正在寻找某种类型的脚本,它可以遍历共享文件夹并更改每个文件和文件夹的权限,以便科学共享是所有者,而个别教师具有编辑权限。
这是否可能,如果是这样,任何人都可以提供一些帮助,如何/从哪里开始......目前无能为力。
提前致谢。
答案 0 :(得分:0)
编辑:
请参阅issue 2756,注意管理员无法通过Google Apps脚本更改文件的所有权:
...这与您无法为文件更改自己的事实有关 你不拥有。任何非法ACL更改都会发生此错误,例如 当你是一名观众时,试图调用addEditor()。
要更改非管理员拥有的文件的所有权,他们必须使用Google Drive SDK,通过OAuth进行身份验证。
这当然是可行的,但仅适用于运行脚本的用户拥有的文件。
这是一个脚本,可以在Science Shared
文件夹中找到当前用户拥有的所有文件,并将所有权转让给用户science-shared
。它被设计为包含电子表格的脚本,该脚本创建自定义菜单并使用电子表格浏览器UI。将电子表格放入您的共享目录中,任何教师都应该能够使用它来批量传输自己的文件。
管理员应该可以使用该脚本更改任何教师的文件 - 只需收集origOwner
的ID,然后将其传递给chownFilesInFolder
。
警告:它只处理文件而不是子目录 - 如果需要,你可以扩展它。
/**
* Find all files owned by current user in given folder,
* and change their ownership to newOwner.
* Note: sub-folders are untouched
*/
function chownFilesInFolder(folderId,origOwner,newOwner) {
var folder = DriveApp.getFolderById(folderId);
var contents = folder.getFiles();
while(contents.hasNext()) {
var file = contents.next();
var name = file.getName();
var owner = file.getOwner().getEmail();
// Note: domain security policies may block access to user's emails
// If so, this will return a blank string - good enough for our purposes.
if (owner == origOwner) {
// Found a file owned by current user - change ownership
Logger.log(name);
//file.setOwner(newOwner);
}
}
};
/**
* Spreadsheet browser-based UI driver for chownFilesInFolder()
*/
function changeOwnership() {
var resp = Browser.msgBox("Transfer 'Science Shared' files",
"Are you sure you want to transfer ownership of all your shared files?",
Browser.Buttons.YES_NO);
if (resp == "yes") {
var folderName = "Science Shared";
// Assume there is just one "Science Shared" folder.
var folder = DriveApp.getFoldersByName(folderName);
if (!folder.hasNext()) {
throw new Error("Folder not found ("+folderName+")");
}
else {
var folderId = folder.next().getId();
var origOwner = Session.getActiveUser().getEmail(); // Operate on own files
var newOwner = "science_shared@example.com";
chownFilesInFolder(folderId,origOwner,newOwner);
Browser.msgBox("Operation completed", Browser.Buttons.OK);
}
}
else Browser.msgBox("Operation aborted", Browser.Buttons.OK);
}
/**
* Adds a custom menu to the active spreadsheet, containing a single menu item
*/
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Transfer 'Science Shared' files",
functionName : "changeOwnership"
}];
spreadsheet.addMenu("Science-Shared", entries);
};
我希望这有助于您入门。