ฉันสร้างเว็บแอปของ Google Apps Scripts แล้วซึ่งควรใกล้เคียงกับสิ่งที่คุณต้องการ
สำคัญ! ก่อนเรียกใช้สิ่งนี้ในโฟลเดอร์ใด ๆ ของคุณตรวจสอบให้แน่ใจว่าคุณทดสอบในบัญชีอื่น แม้ว่าดูเหมือนว่าสคริปต์จะทำงานได้ตามที่ตั้งใจ แต่ฉันไม่สามารถรับประกันได้ว่ามันจะไม่ทำให้เสียสิทธิ์ของคุณ ดังนั้นให้อ่านสคริปต์อย่างละเอียดตรวจสอบกับเอกสารสำหรับ Google Apps Scriptsและทดสอบอย่างละเอียดก่อนที่จะทำงานกับข้อมูลการผลิตใด ๆ
UI ของสคริปต์นั้นพื้นฐานมากดังนั้นอย่ายกเว้นสิ่งที่น่าสนใจ
var selectedFolder;
var dialog;
function doGet() {
var app = UiApp.createApplication();
var heading = app.createHTML("<h1>Folders for</h1>");
app.add(heading);
var allFoldersIterator = DriveApp.getFolders();
var text = app.createTextArea().setName("text").setId("output");
app.add(text);
var tree = app.createTree();
var rootFolder = DriveApp.getRootFolder();
var treeRoot = app.createTreeItem(rootFolder.getName()).setId(rootFolder.getId());
var handler = app.createServerHandler("folderSelected");
tree.addItem(treeRoot);
tree.addSelectionHandler(handler);
treeRoot.setState(true);
createBranch(rootFolder, treeRoot, app);
app.add(tree);
var selectedFolderIdBox = app.createTextBox().setName("selectedFolderIdBox").setId("selectedFolderIdBox");
app.add(selectedFolderIdBox);
return app;
}
function createBranch(folder, branch, app) {
var children = folder.getFolders();
while (children.hasNext()) {
child = children.next();
Logger.log("Folder id: " + child.getId());
var subBranch = app.createTreeItem(child.getName()).setId(child.getId());
branch.addItem(subBranch);
createBranch(child, subBranch, app);
}
}
function folderSelected(eventInfo) {
var app = UiApp.getActiveApplication();
var parameter = eventInfo.parameter;
Logger.log("Selected " + eventInfo.parameter.selected);
selectedFolder = DriveApp.getFolderById(eventInfo.parameter.selected);
var selectedFolderIdBox = app.getElementById("selectedFolderIdBox");
selectedFolderIdBox.setValue(eventInfo.parameter.selected);
var okHandler = app.createServerHandler("okResetPermissions");
okHandler.addCallbackElement(selectedFolderIdBox);
dialog = app.createDialogBox(true, true);
var panel = app.createFlowPanel();
dialog.add(panel);
dialog.setId("confirmationDialog");
dialog.setPopupPosition(100, 100).setSize(500, 500);
panel.add(app.createLabel("Do you want to reset permissions for all files found in folder " + selectedFolder.getName() + " and its subfolders?\n (Click outside of the dialog box to cancel)"));
panel.add(app.createButton("Do it!", okHandler));
dialog.show();
return app;
}
function okResetPermissions(eventInfo) {
var selectedFolderId = eventInfo.parameter.selectedFolderIdBox;
var selectedFolder = DriveApp.getFolderById(selectedFolderId);
Logger.log("Resetting permissions on " + selectedFolder.getName());
var app = UiApp.getActiveApplication();
app.getElementById("confirmationDialog").hide();
Logger.log("Confirmation dialog hidden");
var progressIndicator = app.createDialogBox(false, true);
progressIndicator.setId("progressIndicator");
progressIndicator.setPopupPosition(100, 100).setSize(500, 500);
var label = app.createLabel("Working ...");
progressIndicator.add(label);
progressIndicator.show();
doResetPermissions(selectedFolder, function() {
var app = UiApp.getActiveApplication();
var progressIndicator = app.getElementById("progressIndicator");
progressIndicator.hide();
return app;
});
return app;
}
function doResetPermissions(selectedFolder, callback) {
Logger.log("Resetting permissions on folder " + selectedFolder.getName());
var sharingAccess = selectedFolder.getSharingAccess();
var sharingPermission = selectedFolder.getSharingPermission();
var files = selectedFolder.getFiles();
while (files.hasNext()) {
var file = files.next();
Logger.log(" Resetting permissions on file " + file.getName());
file.setSharing(sharingAccess, sharingPermission);
var viewers = file.getViewers();
for (var i = 0; i < viewers.length; i++) {
Logger.log(" Removing viewer " + viewers[i].getEmail());
file.removeViewer(viewers[i]);
}
var editors = file.getEditors();
for (var i = 0; i < editors.length; i++) {
Logger.log(" Removing editor " + editors[i].getEmail());
file.removeEditor(editors[i]);
}
}
var children = selectedFolder.getFolders();
while (children.hasNext()) {
var child = children.next();
doResetPermissions(child);
}
if (callback) {
callback();
}
}
ติดตั้งสคริปต์นี้ไปที่ Google ไดรฟ์ของคุณและคลิกใหม่→สคริปต์ของ Google Apps วางในรหัสและเผยแพร่→กระจายเป็นเว็บแอป
ตั้งสคริปต์เพื่อเรียกใช้ในฐานะที่ล็อกอินเข้าใช้ (หรือคล้าย Google ไดรฟ์ของฉันไม่ได้เป็นภาษาอังกฤษ)
เมื่อเรียกใช้แอพคุณจะเห็นลำดับชั้นของโฟลเดอร์ของ Google Drive ของคุณ การคลิกที่โฟลเดอร์จะแสดงป๊อปอัพที่ดูน่าเกลียดซึ่งคุณสามารถเลือกที่จะเรียกใช้สคริปต์รีเซ็ตสิทธิ์สำหรับโฟลเดอร์และโฟลเดอร์ย่อย (ฟังก์ชั่นdoResetPermissions
ในรหัส)
ฟังก์ชั่นนี้วนซ้ำผ่านโฟลเดอร์และโฟลเดอร์ย่อย สำหรับแต่ละไฟล์ที่พบมันจะดำเนินการfile.setSharing
กับค่าจากโฟลเดอร์หลัก นอกจากนี้ยังเรียกร้องfile.removeViewer
ให้ผู้ชมทั้งหมดที่ลงทะเบียนและfile.removeEditor
บรรณาธิการที่ลงทะเบียนทั้งหมด
ตรวจสอบเอกสารสำหรับremoveViewerและremoveEditorเพื่อให้แน่ใจว่าพวกเขาทำสิ่งที่คุณต้องการ
โปรดทราบว่าการเรียกใช้สคริปต์อาจใช้เวลาสักครู่ (ขึ้นอยู่กับขนาดของโครงสร้างโฟลเดอร์ของคุณ) และไม่มีการป้อนกลับในขณะที่ทำงานยกเว้นในบันทึกของนักวิ่งสคริปต์ ( ดู→บันทึก )